Showing preview only (9,187K chars total). Download the full file or copy to clipboard to get everything.
Repository: irisnet/irishub
Branch: master
Commit: e892804369a2
Files: 274
Total size: 8.7 MB
Directory structure:
gitextract_o9j_lv5k/
├── .dockerignore
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── custom.md
│ │ ├── feature_request.md
│ │ └── release.md
│ └── workflows/
│ ├── codeql-analysis.yml
│ ├── deploy-docs.yml
│ ├── publish-docker-image.yml
│ ├── releases.yml
│ └── run-unit-tests.yml
├── .gitignore
├── .golangci.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── RELEASE.md
├── app/
│ ├── ante/
│ │ ├── ante.go
│ │ ├── decorators.go
│ │ ├── handler_options.go
│ │ ├── reject_msgs.go
│ │ └── sigverify.go
│ ├── app.go
│ ├── encoding.go
│ ├── export.go
│ ├── keepers/
│ │ ├── keepers.go
│ │ ├── keys.go
│ │ └── types.go
│ ├── modules.go
│ ├── params/
│ │ ├── encoding.go
│ │ ├── params.go
│ │ └── proto.go
│ ├── rpc/
│ │ ├── auth.go
│ │ └── override.go
│ ├── sim_bench_test.go
│ ├── sim_test.go
│ ├── upgrade.go
│ └── upgrades/
│ ├── types.go
│ ├── v200/
│ │ ├── config.go
│ │ └── upgrades.go
│ ├── v210/
│ │ └── upgrades.go
│ ├── v300/
│ │ ├── constants.go
│ │ ├── lsm.go
│ │ └── upgrades.go
│ └── v400/
│ └── upgrades.go
├── buf.gen.swagger.yaml
├── buf.work.yaml
├── client/
│ ├── keystore/
│ │ ├── keys.go
│ │ ├── keys_test.go
│ │ └── keystore.go
│ └── lite/
│ ├── config.json
│ ├── statik/
│ │ └── statik.go
│ ├── swagger-ui/
│ │ ├── index.html
│ │ ├── swagger-ui-bundle.js
│ │ ├── swagger-ui-standalone-preset.js
│ │ ├── swagger-ui.css
│ │ └── swagger.yaml
│ └── swagger.go
├── cmd/
│ ├── contract_tests/
│ │ └── main.go
│ └── iris/
│ ├── cmd/
│ │ ├── genaccounts.go
│ │ ├── genesis.go
│ │ ├── keys.go
│ │ ├── root.go
│ │ ├── testnet.go
│ │ └── util.go
│ └── main.go
├── contrib/
│ └── devtools/
│ ├── Makefile
│ └── install-golangci-lint.sh
├── crypto/
│ └── keyring/
│ └── options.go
├── docker-compose.yml
├── docs/
│ ├── .vuepress/
│ │ ├── client.js
│ │ ├── compoments/
│ │ │ └── PageHistory.vue
│ │ ├── config.js
│ │ ├── enhanceApp.js
│ │ └── styles/
│ │ └── palette.styl
│ ├── Dockerfile
│ ├── README.md
│ ├── chainide-for-irisnet/
│ │ ├── configuration.md
│ │ ├── cosmos-usage.md
│ │ └── usage.md
│ ├── cli-client/
│ │ ├── auth.md
│ │ ├── bank.md
│ │ ├── debug.md
│ │ ├── distribution.md
│ │ ├── evm.md
│ │ ├── farm.md
│ │ ├── gov.md
│ │ ├── htlc.md
│ │ ├── intro.md
│ │ ├── keys.md
│ │ ├── mint.md
│ │ ├── nft.md
│ │ ├── oracle.md
│ │ ├── params.md
│ │ ├── random.md
│ │ ├── record.md
│ │ ├── service.md
│ │ ├── slashing.md
│ │ ├── staking.md
│ │ ├── status.md
│ │ ├── tendermint.md
│ │ ├── token.md
│ │ ├── tx.md
│ │ └── upgrade.md
│ ├── concepts/
│ │ ├── bech32-prefix.md
│ │ ├── fee.md
│ │ ├── general-concepts.md
│ │ ├── genesis-file.md
│ │ ├── gov-params.md
│ │ ├── key.md
│ │ ├── sentry-nodes.md
│ │ └── validator-faq.md
│ ├── daemon/
│ │ ├── commands.md
│ │ ├── export.md
│ │ ├── intro.md
│ │ └── local-testnet.md
│ ├── endpoints/
│ │ ├── grpc-client.md
│ │ ├── grpc-rest.md
│ │ ├── intro.md
│ │ ├── legacy-rest.md
│ │ ├── proto-docs.md
│ │ ├── protodoc-markdown.tmpl
│ │ └── sdk.md
│ ├── features/
│ │ ├── bank.md
│ │ ├── coinswap.md
│ │ ├── distribution.md
│ │ ├── evm.md
│ │ ├── governance.md
│ │ ├── guardian.md
│ │ ├── htlc.md
│ │ ├── mint.md
│ │ ├── mt.md
│ │ ├── nft-metadata.json
│ │ ├── nft.md
│ │ ├── oracle.md
│ │ ├── random.md
│ │ ├── service-pricing.json
│ │ ├── service-result.json
│ │ ├── service.md
│ │ ├── slashing.md
│ │ ├── staking.md
│ │ └── upgrade.md
│ ├── get-started/
│ │ ├── evm-contract.md
│ │ ├── explorers.md
│ │ ├── install.md
│ │ ├── intro.md
│ │ ├── mainnet.md
│ │ ├── state-sync.md
│ │ ├── testnet.md
│ │ └── wallets.md
│ ├── migration/
│ │ ├── account.md
│ │ └── keys.md
│ ├── package.json
│ ├── resources/
│ │ └── whitepaper.md
│ └── tools/
│ ├── kms/
│ │ ├── kms_cpu.md
│ │ └── kms_ledger.md
│ ├── kms.md
│ ├── ledger.md
│ ├── monitor.md
│ └── priv_validator_state.json
├── go.mod
├── go.sum
├── modules/
│ ├── evm/
│ │ ├── eip1559.go
│ │ ├── keeper.go
│ │ ├── moudle.go
│ │ ├── state_transition.go
│ │ └── types.go
│ ├── guardian/
│ │ ├── client/
│ │ │ ├── cli/
│ │ │ │ ├── cli_test.go
│ │ │ │ ├── flags.go
│ │ │ │ ├── query.go
│ │ │ │ └── tx.go
│ │ │ └── testutil/
│ │ │ └── test_helpers.go
│ │ ├── genesis.go
│ │ ├── genesis_test.go
│ │ ├── handler.go
│ │ ├── keeper/
│ │ │ ├── grpc_query.go
│ │ │ ├── grpc_query_test.go
│ │ │ ├── keeper.go
│ │ │ ├── keeper_test.go
│ │ │ └── msg_service.go
│ │ ├── module.go
│ │ └── types/
│ │ ├── codec.go
│ │ ├── errors.go
│ │ ├── event.go
│ │ ├── genesis.go
│ │ ├── genesis.pb.go
│ │ ├── guardian.pb.go
│ │ ├── keys.go
│ │ ├── msgs.go
│ │ ├── msgs_test.go
│ │ ├── query.pb.go
│ │ ├── query.pb.gw.go
│ │ ├── tx.pb.go
│ │ └── types.go
│ ├── internft/
│ │ ├── interface.go
│ │ └── keeper.go
│ └── mint/
│ ├── abci.go
│ ├── abci_test.go
│ ├── client/
│ │ ├── cli/
│ │ │ ├── cli_test.go
│ │ │ └── query.go
│ │ ├── rest/
│ │ │ ├── grpc_query_test.go
│ │ │ ├── query.go
│ │ │ └── rest.go
│ │ └── testutil/
│ │ └── test_helpers.go
│ ├── genesis.go
│ ├── keeper/
│ │ ├── grpc_query.go
│ │ ├── grpc_query_test.go
│ │ ├── keeper.go
│ │ ├── keeper_test.go
│ │ ├── migrations.go
│ │ ├── msg_server.go
│ │ └── params.go
│ ├── migrations/
│ │ └── v2/
│ │ ├── migrate.go
│ │ └── migrate_test.go
│ ├── module.go
│ ├── simulation/
│ │ ├── decoder.go
│ │ ├── decoder_test.go
│ │ └── genesis.go
│ └── types/
│ ├── codec.go
│ ├── errors.go
│ ├── events.go
│ ├── expected_keepers.go
│ ├── genesis.go
│ ├── genesis.pb.go
│ ├── keys.go
│ ├── mint.pb.go
│ ├── minter.go
│ ├── minter_test.go
│ ├── msg.go
│ ├── params.go
│ ├── query.pb.go
│ ├── query.pb.gw.go
│ └── tx.pb.go
├── network/
│ ├── hermes/
│ │ ├── README.md
│ │ ├── config.toml
│ │ ├── create-conn.sh
│ │ ├── restore-keys.sh
│ │ ├── start.sh
│ │ └── variables.sh
│ ├── init.sh
│ ├── nft-transfer.md
│ ├── relayer/
│ │ └── interchain-nft-config/
│ │ ├── chains/
│ │ │ ├── test-1.json
│ │ │ └── test-2.json
│ │ ├── paths/
│ │ │ └── test1-nft-test2.json
│ │ └── rly.sh
│ └── start.sh
├── proto/
│ ├── buf.gen.gogo.yaml
│ ├── buf.gen.pulsar.yaml
│ ├── buf.yaml
│ └── irishub/
│ ├── guardian/
│ │ ├── genesis.proto
│ │ ├── guardian.proto
│ │ ├── query.proto
│ │ └── tx.proto
│ └── mint/
│ ├── genesis.proto
│ ├── mint.proto
│ ├── query.proto
│ └── tx.proto
├── scripts/
│ ├── Makefile
│ ├── protoc-swagger-gen-evm.sh
│ ├── protoc-swagger-gen-ibc.sh
│ ├── protoc-swagger-gen.sh
│ └── protocgen.sh
├── sims.mk
├── testutil/
│ ├── app.go
│ └── test_helpers.go
├── types/
│ ├── address.go
│ ├── chain_id.go
│ ├── genesis.go
│ └── runtime.go
└── wrapper/
├── farm.go
└── token.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
Dockerfile
build/
vendor/
================================================
FILE: .gitattributes
================================================
lite/swagger-ui/* linguist-vendored
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: haifengxi
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/custom.md
================================================
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: haifengxi
---
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: haifengxi
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/ISSUE_TEMPLATE/release.md
================================================
---
name: Release
about: Release a new version
title: Release "$(replace by version)"
labels: release
assignees: haifengxi
---
**Check List**
- [ ] CI Passed
- [ ] CHANGELOG Updated
- [ ] Documents Updated
- [ ] Application Versions Updated
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master, develop, hotfix/*, release/* ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '45 3 * * 3'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .github/workflows/deploy-docs.yml
================================================
name: Build and Deploy Docs
on:
push:
branches: [ "master" ]
paths: [ "docs/**" ]
jobs:
setup-build-publish:
name: Setup, Build and Publish
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: 'docs/'
sparse-checkout-cone-mode: false
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v2
with:
file: ./docs/Dockerfile
push: true
tags: irisnet/docs:${{ github.sha }}
deploy:
name: Deploy
runs-on: default-runner-set
environment: production
permissions:
contents: 'read'
id-token: 'write'
steps:
- name: 'Set up Google Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v2'
with:
version: '>= 363.0.0'
install_components: "gke-gcloud-auth-plugin"
- name: Set up Kubectl
uses: azure/setup-kubectl@v3
with:
version: 'v1.21.0'
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
project_id: ${{ secrets.GKE_PROJECT }}
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENDITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
token_format: 'access_token'
- name: Set up GKE credentials
uses: google-github-actions/get-gke-credentials@v2
with:
cluster_name: ${{ secrets.GKE_CLUSTER }}
location: ${{ secrets.GKE_REGION }}
- name: Deploy to GKE
run: |
gcloud container clusters get-credentials app --region ${{ secrets.GKE_REGION }} --project ${{ secrets.GKE_PROJECT }}
kubectl set image -n irisnet deployment/irisnet-docs frontend=irisnet/docs:${{ github.sha }}
kubectl rollout status -n irisnet deployment/irisnet-docs
================================================
FILE: .github/workflows/publish-docker-image.yml
================================================
name: Build and Publish Docker Image
on:
push:
branches:
- master
tags:
- "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10
- "v[0-9]+.[0-9]+.[0-9]+-rc*" # Push events to matching v*, i.e. v1.0-rc1, v20.15.10-rc5
jobs:
setup-build-publish:
name: Setup, Build and Publish
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v2
with:
build-args: |
EVM_CHAIN_ID=6688
push: true
tags: irisnet/irishub:${{ github.ref_type == 'tag' && github.ref_name || github.sha }}-6688
================================================
FILE: .github/workflows/releases.yml
================================================
name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
jobs:
setup-build-publish:
name: Setup, Build and Publish
runs-on: ubuntu-22.04
steps:
- name: Checkout Codes
uses: actions/checkout@v4
- name: Setup Golang
uses: actions/setup-go@v5
with:
go-version: '^1.21.0' # The Go version to download (if necessary) and use.
- name: Build Binaries
run: |
sudo apt-get install -y gcc-aarch64-linux-gnu
make build-all-binaries
- name: Publish Release
uses: softprops/action-gh-release@v2
with:
body_path: RELEASE.md
files: |
build/iris-linux-amd64
build/iris-linux-arm64
================================================
FILE: .github/workflows/run-unit-tests.yml
================================================
name: Run Unit Tests
on: [pull_request]
jobs:
test-unit:
name: Run Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '^1.21' # The Go version to download (if necessary) and use.
- run: make test-unit
================================================
FILE: .gitignore
================================================
vendor
.DS_Store
.idea
.vscode
build/
.out
docs/.vuepress/dist/
node_modules/
dependency-graph.png
mytestnet
buf-stamp
testnet
================================================
FILE: .golangci.yml
================================================
linters:
disable-all: true
enable:
- errcheck
- golint
- ineffassign
- unconvert
- misspell
linters-settings:
gocyclo:
min-complexity: 11
errcheck:
ignore: fmt:.*,io/ioutil:^Read.*,github.com/spf13/cobra:MarkFlagRequired,github.com/spf13/viper:BindPFlag,./lite/statik
golint:
min-confidence: 1.1
run:
tests: false
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## 3.1.0
### State Machine Breaking
* (IRISHub) [\#2944](https://github.com/irisnet/irishub/pull/2944) Bump cosmos-sdk to v0.47.15-ics-lsm
## 3.0.0
### Features
* (IRISHub) [\#2908](https://github.com/irisnet/irishub/pull/2908) Add ICA module.
* (IRISHub) [\#2909](https://github.com/irisnet/irishub/pull/2909) Add Cosmos LSM module.
* (IRISHub) [\#2925](https://github.com/irisnet/irishub/pull/2925) Enhance token module.
* (IRISHub) [\#2938](https://github.com/irisnet/irishub/pull/2938) Reduce `MinGasPrice` of EVM to 50Gwei.
### Improvements
* (IRISHub) [\#2910](https://github.com/irisnet/irishub/pull/2910) Improve code.
* (IRISHub) [\#2912](https://github.com/irisnet/irishub/pull/2912) Change go path from v2 to v3.
* (IRISHub) [\#2914](https://github.com/irisnet/irishub/pull/2914) Improve unit test.
* (IRISHub) [\#2918](https://github.com/irisnet/irishub/pull/2918) Adjusting the parameters of the ica module.
* (IRISHub) [\#2919](https://github.com/irisnet/irishub/pull/2919) Adjusting gov config.
* (IRISHub) [\#2924](https://github.com/irisnet/irishub/pull/2924) Update evm `AllowUnprotectedTxs` params.
* (IRISHub) [\#2928](https://github.com/irisnet/irishub/pull/2928) Initialize gov `MinDepositRatio` params.
* (IRISMod) [\#385](https://github.com/irisnet/irismod/pull/385) Bump cosmos-sdk to v0.47.9-ics-lsm.
## 2.1.0
### API Breaking
* (NFT) [irismod \#378](https://github.com/irisnet/irismod/pull/378) Support x/nft API query.
* (NFT) [irismod \#378](https://github.com/irisnet/irismod/pull/378) Support irismod/nft API query on IBC denom.
### State Machine Breaking
* (IRISHub) [\#2884](https://github.com/irisnet/irishub/pull/2884) Add nft-transfer module with version v1.1.3-ibc-v7.3.0
* (IRISHub) [\#2884](https://github.com/irisnet/irishub/pull/2884) Bump up tibc-go version to v0.5.0
* (IRISHub) [\#2884](https://github.com/irisnet/irishub/pull/2884) Bump up irismod version to v1.8.0
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Add consensus module.
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Bump up ethermint version to v0.22.0
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Bump up ibc-go version to v7.3.0
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Bump up cosmos-sdk to v0.47.4
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Bump up cometbft to v0.37.2
### Features
* (NFT-Transfer) [\#2863](https://github.com/irisnet/irishub/pull/2863) IRISHub now integrates the functionality of interchain nft-transfer, allowing you to transfer NFTs to other chains.
### Improvements
* (IRISHub) [\#2858](https://github.com/irisnet/irishub/pull/2858) Migrate mint params.
* (IRISHub) [irismod \#381](https://github.com/irisnet/irismod/pull/381) Forbidden to mint nft under ibc class.
* (IRISMod) [irismod \#364](https://github.com/irisnet/irismod/pull/364) Migrate token params.
* (IRISMod) [irismod \#363](https://github.com/irisnet/irismod/pull/363) Migrate service params.
* (IRISMod) [irismod \#362](https://github.com/irisnet/irismod/pull/362) Migrate htlc params.
* (IRISMod) [irismod \#361](https://github.com/irisnet/irismod/pull/361) Migrate farm params.
* (IRISMod) [irismod \#360](https://github.com/irisnet/irismod/pull/360) Migrate coinswap params.
### Bug Fixes
* (IRISHub) [\#2863](https://github.com/irisnet/irishub/pull/2863) Fix collect-gentxs command.
* (IRISHub) [\#2852](https://github.com/irisnet/irishub/pull/2852) Fix eip712 signature and inject ParseChainID method
* (IRISMod) [irismod \#380](https://github.com/irisnet/irismod/pull/380) Fix farm genesis validation.
* (IRISMod) [irismod \#367](https://github.com/irisnet/irismod/pull/367) Fix mt module rest url conflict.
* (IRISMod) [irismod \#356](https://github.com/irisnet/irismod/pull/356) Replace base64.StdEncoding with base64.RawStdEncoding.
* (IRISMod) [irismod \#351](https://github.com/irisnet/irismod/pull/351) Fix wrong addr length of the service module.
### Security
* (IRISHub) [\#2865](https://github.com/irisnet/irishub/pull/2865) Disable the vesting account creation to prevent contract address front-running.
## 2.0.0
### State Machine Breaking
* (IRISHub) [\#2831](https://github.com/irisnet/irishub/pull/2831) Bump up tibc-go version to v0.4.3
* (IRISHub) [\#2831](https://github.com/irisnet/irishub/pull/2831) Bump up irismod version to v1.7.3
* (IRISHub) [\#2766](https://github.com/irisnet/irishub/pull/2766) Bump up cosmos sdk to v0.46.9
* (IRISHub) [\#2822](https://github.com/irisnet/irishub/pull/2822) Remove ICA module
### Features
* (IRISHub) [\#2776](https://github.com/irisnet/irishub/pull/2776) Feat: support evm
### Improvements
* (IRISHub) [\#2824](https://github.com/irisnet/irishub/pull/2824) Feat: update swagger docs & evm configuration
* (IRISMod) [irismod \#340](https://github.com/irisnet/irismod/pull/340) The token module supports the exchange of two tokens.
* (IRISMod) [irismod \#342](https://github.com/irisnet/irismod/pull/342) Refactor token module.
* (IRISMod) [irismod \#348](https://github.com/irisnet/irismod/pull/348) Adjust the length limit of classID and nftID in nft.
### Bug Fixes
* (IRISHub) [\#2828](https://github.com/irisnet/irishub/pull/2828) Fix solve proposal handler route conflict
* (IRISHub) [\#2827](https://github.com/irisnet/irishub/pull/2827) Fix add ibc client proposal for command
* (IRISHub) [\#2794](https://github.com/irisnet/irishub/pull/2794) Fix auth bech32 account prefix
* (IRISMod) [irismod \#336](https://github.com/irisnet/irismod/pull/336) Fix farm genesis validate failed.
* (IRISMod) [irismod \#327](https://github.com/irisnet/irismod/pull/327) Only export htlc with state=open.
* (IRISMod) [irismod \#347](https://github.com/irisnet/irismod/pull/347) Fix service refund address parse error.
* (IRISMod) [irismod \#350](https://github.com/irisnet/irismod/pull/350) Fix address parse errors caused by service rest api conflicts.
## 1.4.1
*November 28, 2022*
### Application
* [\#2780](https://github.com/irisnet/irishub/pull/2780) Bump tibc-go version to v0.4.2
* [\#2779](https://github.com/irisnet/irishub/pull/2779) Bump up irismod version to v1.7.2
* [\#2777](https://github.com/irisnet/irishub/pull/2777) Add SetIAVLCacheSize and SetIAVLDisableFastNode
* [\#2775](https://github.com/irisnet/irishub/pull/2775) Remove group module
## 1.4.0
*November 15, 2022*
### Application
* [\#2759](https://github.com/irisnet/irishub/pull/2759) Fix export error when with flag `--for-zero-height`
* [\#2766](https://github.com/irisnet/irishub/pull/2766) Bump up cosmos sdk to v0.46.4
* [\#2768](https://github.com/irisnet/irishub/pull/2768) Bump up ibc-go to v5.0.1
* [\#2770](https://github.com/irisnet/irishub/pull/2770) Bump up irismod to v1.7.0 & Bump up tibc-go to v0.4.0
* [irismod \#309](https://github.com/irisnet/irismod/pull/309) Refactor nft with cosmos-sdk nft module.
* [irismod \#308](https://github.com/irisnet/irismod/pull/308) Coinswap module adds unilateral injection liquidity function.
### API Breaking Changes
* [irismod \#309](https://github.com/irisnet/irismod/pull/309) GRPC method `Owner` rename to `NFTsOfOwner`, Remove deprecated `Queries` api
### Bug Fixes
* [irismod \#304](https://github.com/irisnet/irismod/pull/304) Fix nft module import error.
* [irismod \#314](https://github.com/irisnet/irismod/pull/314) Fix `addLiquidity` panic error.
## 1.3.0
*March 19, 2022*
### Application
* [\#2735](https://github.com/irisnet/irishub/pull/2735) Bump up irismod
* [\#2734](https://github.com/irisnet/irishub/pull/2734) Bump up TIBC-Go
* [TIBC-Go \#247](https://github.com/bianjieai/tibc-go/pull/103) Support cross chain MT transfer via TIBC
* [irismod \#247](https://github.com/irisnet/irismod/pull/247) Added the Farm Proposal function, allowing users to submit on-chain proposals to apply for a specified amount of IRIS in IRISnet’s community pool as farming rewards.
* [irismod \#249](https://github.com/irisnet/irismod/pull/249) An added gas fee of 5,000 IRIS, with a tax rate of 40%, for the creation of new liquidity pools.
* [irismod \#245](https://github.com/irisnet/irismod/pull/245) Compatibilized & expanded the functions of the NFT module to match ERC-721 spec, and to support application requirements in a more flexible manner.
* [irismod \#269](https://github.com/irisnet/irismod/pull/269) Introduced ERC-1155 compatible MT (Multi Token) module
## 1.2.0
*November 03th, 2021*
### Application
* [\#2681](https://github.com/irisnet/irishub/pull/2681) Bump cosmos-sdk version to [v0.44.2](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.44.2)
* [\#2668](https://github.com/irisnet/irishub/pull/2668) Integrated tibc protocol
* [\#2623](https://github.com/irisnet/irishub/pull/2623) Import farm module
* [irismod \#219](https://github.com/irisnet/irismod/pull/219) Refactor coinswap module
* [irismod \#189](https://github.com/irisnet/irismod/pull/189) Enhance nft module
### Breaking Changes
* [irismod \#219](https://github.com/irisnet/irismod/pull/219) Liquidity tokens are named as *lpt-{number}*, and the existing liquidity will be automatically modified during the upgrade
* [cosmos-sdk \#10041](https://github.com/cosmos/cosmos-sdk/pull/10041) Remove broadcast & encode legacy REST endpoints. Please see the [REST Endpoints Migration guide](https://docs.cosmos.network/master/migrations/rest.html) to migrate to the new REST endpoints.
## 1.1.1
*April 21th, 2021*
### Application
* [\#2611](https://github.com/irisnet/irishub/pull/2611) Bump cosmos-sdk version to [v0.42.4](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.42.4)
* [\#2611](https://github.com/irisnet/irishub/pull/2611) Bump tendermint version to [v0.34.9](https://github.com/tendermint/tendermint/releases/tag/v0.34.9)
## 1.1.0
*March 26th, 2021*
### CLI
* [\#2592](https://github.com/irisnet/irishub/pull/2592) Bump irismod version to [v1.4.0](https://github.com/irisnet/irismod/releases/tag/v1.4.0)
### Application
* [\#2602](https://github.com/irisnet/irishub/pull/2602) Bump cosmos-sdk version to [v0.42.2](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.42.3)
* [\#2588](https://github.com/irisnet/irishub/pull/2588) Bump tendermint verion to [v0.34.8](https://github.com/tendermint/tendermint/releases/tag/v0.34.8)
* [\#2592](https://github.com/irisnet/irishub/pull/2592) Bump irismod version to [v1.4.0](https://github.com/irisnet/irismod/releases/tag/v1.4.0)
* [\#2589](https://github.com/irisnet/irishub/issues/2589) Migrate irishub from v1.0 to v1.1
## 1.0.1
*February 18th, 2021*
### Application
This release fixes a downstream security issue which impacts Cosmos SDK users.
See the [Tendermint v0.34.7 SDK changelog](https://github.com/tendermint/tendermint/blob/v0.34.x/CHANGELOG.md#v0347) for details.
* [\#2573](https://github.com/irisnet/irishub/pull/2573) Bump cosmos-sdk version to [v0.41.3](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.41.3)
* [\#2571](https://github.com/irisnet/irishub/pull/2571) Bump tendermint verion to [v0.34.7](https://github.com/tendermint/tendermint/releases/tag/v0.34.7)
## 1.0.0
*February 9th, 2021*
### CLI
* [\#2541](https://github.com/irisnet/irishub/pull/2541) Bump cosmos-sdk version to [v0.41.0](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.41.0)
* [\#2515](https://github.com/irisnet/irishub/pull/2515) Bump tendermint verion to [v0.34.3](https://github.com/tendermint/tendermint/releases/tag/v0.34.3)
* [\#2567](https://github.com/irisnet/irishub/pull/2567) Bump irismod version to [v1.3.1](https://github.com/irisnet/irismod/releases/tag/v1.3.1)
* [\#2505](https://github.com/irisnet/irishub/pull/2505) Remove duplicate cmd
* [\#2154](https://github.com/irisnet/irishub/issues/2154) Support native token unit conversion in command
### Application
* [\#2541](https://github.com/irisnet/irishub/pull/2541) Bump cosmos-sdk version to [v0.41.0](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.41.0)
* [\#2515](https://github.com/irisnet/irishub/pull/2515) Bump tendermint verion to [v0.34.3](https://github.com/tendermint/tendermint/releases/tag/v0.34.3)
* [\#2567](https://github.com/irisnet/irishub/pull/2567) Bump irismod version to [v1.3.1](https://github.com/irisnet/irismod/releases/tag/v1.3.1)
* [\#2551](https://github.com/irisnet/irishub/pull/2551) Disable repeated service invocation
* [\#2542](https://github.com/irisnet/irishub/pull/2542) Migrate withdraw infos
* [\#2524](https://github.com/irisnet/irishub/pull/2524) Fix proto package and path
* [\#2518](https://github.com/irisnet/irishub/pull/2518) Move abandoned tokens to communityTax
* [\#2512](https://github.com/irisnet/irishub/pull/2512) Normalize msg and genesis validation
* [\#2484](https://github.com/irisnet/irishub/pull/2484) Bump cosmos-sdk version to [v0.40.0](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.40.0)
* [\#2484](https://github.com/irisnet/irishub/pull/2484) Bump tendermint verion to [v0.34.1](https://github.com/tendermint/tendermint/releases/tag/v0.34.1)
* [\#2502](https://github.com/irisnet/irishub/pull/2502) Bump irismod version to [v1.2.0](https://github.com/irisnet/irismod/releases/tag/v1.2.0)
* [\#2501](https://github.com/irisnet/irishub/issues/2501) Merge the swagger docs of cosmos-sdk and irismod
* [\#2485](https://github.com/irisnet/irishub/pull/2485) Support key import 0.16.3 and earlier version keystore file
* [\#2488](https://github.com/irisnet/irishub/pull/2488) Restrict the use of certain token for specified Msg
* [\#2098](https://github.com/irisnet/irishub/issues/2098) Migrate iriscli test
* [\#2097](https://github.com/irisnet/irishub/issues/2097) Add scripts to migrate genesis data from v0.16.3
* [\#2090](https://github.com/irisnet/irishub/issues/2090) Refactor guardian module
* [\#2089](https://github.com/irisnet/irishub/issues/2089) Overwrite mint module
* [\#2500](https://github.com/irisnet/irishub/issues/2500) Migrate IRIShub modules to irismod
* [\#2381](https://github.com/irisnet/irishub/pull/2381) Rebuild irishub v1.0 using cosmos-sdk v0.40
## 0.16.3
*Aug 25th, 2020*
### Application
* [\#4d4c06](https://github.com/irisnet/irishub/commit/4d4c06a6dfdccc4271734ef6eef95960f000384f) Bump ledger-cosmos-go to support cosmos ledger 2.0
## 0.16.2
*Apr 9th, 2020*
### Tendermint
* [\#110](https://github.com/irisnet/tendermint/pull/110) Defend against DoS attacks
## 0.16.1
*Jan 9th, 2020*
### CLI
* [\#2109](https://github.com/irisnet/irishub/issues/2109) Fix the bug that the hash lock can not be specified in the CLI
### Application
* [\#2118](https://github.com/irisnet/irishub/pull/2118) Improve the UX of snapshot
* [\#2119](https://github.com/irisnet/irishub/issues/2119) Prune iavlstore version using rootstore version
## 0.16.0
*Nov 22th, 2019*
### Breaking Changes
* [API Breaking Changes](./docs/light-client/CHANGELOG.md#v0160)
* [\#1912](https://github.com/irisnet/irishub/issues/1912) Update prometheus metrics
### LCD (REST API)
* [\#1858](https://github.com/irisnet/irishub/issues/1858) Add new function - AddLiquidity
* [\#1859](https://github.com/irisnet/irishub/issues/1859) Add new function - RemoveLiquidity
* [\#1860](https://github.com/irisnet/irishub/issues/1860) Add new function - Swap Coin
* [\#1861](https://github.com/irisnet/irishub/issues/1861) Add new function - Query Exchange
* [\#1948](https://github.com/irisnet/irishub/issues/1948) Add client for HTLC
### CLI
* [\#1948](https://github.com/irisnet/irishub/issues/1948) Add client for HTLC
* [\#2030](https://github.com/irisnet/irishub/issues/2030) Fix CLI test for HTLC
### Application
* [\#1858](https://github.com/irisnet/irishub/issues/1858) Add new function - AddLiquidity
* [\#1859](https://github.com/irisnet/irishub/issues/1859) Add new function - RemoveLiquidity
* [\#1860](https://github.com/irisnet/irishub/issues/1860) Add new function - Swap Coin
* [\#1861](https://github.com/irisnet/irishub/issues/1861) Add new function - Query Exchange
* [\#1872](https://github.com/irisnet/irishub/issues/1872) Replace time.Time with uint64 in coinswap msgs
* [\#1811](https://github.com/irisnet/irishub/issues/1811) Add docs for coin-swap
* [\#1879](https://github.com/irisnet/irishub/issues/1879) Add tags for coinswap module
* [\#1910](https://github.com/irisnet/irishub/issues/1910) Add coin-flow for coin-swap module
* [\#1912](https://github.com/irisnet/irishub/issues/1912) Update prometheus metrics
* [\#1936](https://github.com/irisnet/irishub/issues/1936) Update denom's specification
* [\#1941](https://github.com/irisnet/irishub/issues/1941) Refactor document website documentation
* [\#1946](https://github.com/irisnet/irishub/issues/1946) Add new function - Create HTLC
* [\#1949](https://github.com/irisnet/irishub/issues/1949) Add new function - Claim and Refund in HTLC
* [\#1965](https://github.com/irisnet/irishub/issues/1965) Add user docs and specification for HTLC
* [\#1984](https://github.com/irisnet/irishub/issues/1984) Update HTLC docs
* [\#1985](https://github.com/irisnet/irishub/issues/1985) Code formatting and cleaning
* [\#1988](https://github.com/irisnet/irishub/issues/1988) Add HTLC genesis
* [\#1991](https://github.com/irisnet/irishub/issues/1991) Add Coinswap feature doc
* [\#1995](https://github.com/irisnet/irishub/issues/1995) Improve HTLC
* [\#2008](https://github.com/irisnet/irishub/issues/2008) Enhance HTLC genesis test
* [\#2013](https://github.com/irisnet/irishub/issues/2013) Modify timestamp type in LCD
* [\#2015](https://github.com/irisnet/irishub/issues/2015) Add HTLC feature docs
### Tendermint
* [\#1880](https://github.com/irisnet/irishub/issues/1880) Ensure generated private keys are valid
* [\#1885](https://github.com/irisnet/irishub/issues/1885) tendermint use Go modules instead of dep
* [\#1908](https://github.com/irisnet/irishub/issues/1908) Update p2p to v0.32
* [\#1909](https://github.com/irisnet/irishub/issues/1909) Support boltdb
* [\#1913](https://github.com/irisnet/irishub/issues/1913) Remove db from in favor of tendermint/tm-db
* [\#1917](https://github.com/irisnet/irishub/issues/1917) Create a peer state in consensus reactor before the peer is started
* [\#1918](https://github.com/irisnet/irishub/issues/1918) Improve error message returned from AddSignatureFromPubKey
* [\#1919](https://github.com/irisnet/irishub/issues/1919) Self node in addrbook.json and node tries to dial itself
* [\#1920](https://github.com/irisnet/irishub/issues/1920) Fix profiler blocking the entire node
* [\#1921](https://github.com/irisnet/irishub/issues/1921) Exit if SwitchToConsensus fails
* [\#1922](https://github.com/irisnet/irishub/issues/1922) Improve transaction search
## 0.15.5
*Oct 30th, 2019*
### Tendermint
Bump Tendermint version to irisnet/tendermint [v0.31.3](https://github.com/irisnet/tendermint/releases/tag/v0.31.3) to fix the consensus security bug.
## 0.15.4
*Oct 14th, 2019*
### Tendermint
Bump Tendermint version to irisnet/tendermint [v0.31.2](https://github.com/irisnet/tendermint/releases/tag/v0.31.2) to fix the p2p panic error.
## 0.15.3
*Oct 2th, 2019*
### Tendermint
Bump Tendermint version to irisnet/tendermint [v0.31.1](https://github.com/irisnet/tendermint/releases/tag/v0.31.1) to fix the p2p panic error.
## 0.15.2
*Sep 11th, 2019*
### Application
* [\#1940](https://github.com/irisnet/irishub/pull/1940) Do not update gov params when network not equal mainnet
* [\#1945](https://github.com/irisnet/irishub/pull/1945) Fix protocol loading on replay-last-block
## 0.15.1
*Aug 22th, 2019*
### Application
* [\#1895](https://github.com/irisnet/irishub/issues/1895) Run tendermint cleanupFunc before Exit
* [\#1897](https://github.com/irisnet/irishub/issues/1897) Fix possible panic on exporting genesis file
## 0.15.0
*Aug 20th, 2019*
### LCD (REST API)
* [\#1473](https://github.com/irisnet/irishub/issues/1473) Add APIs for Tokens
* [\#1521](https://github.com/irisnet/irishub/issues/1521) Add APIs for Gateways
* [\#1745](https://github.com/irisnet/irishub/issues/1745) POST APIs only generate transactions, not broadcast transactions
* [\#1750](https://github.com/irisnet/irishub/issues/1750) Move params query from `/gov/params` to `/params`
* [\#1802](https://github.com/irisnet/irishub/issues/1802) Remove key-related APIs and enhance API `tx/broadcast`
### CLI
* [\#1750](https://github.com/irisnet/irishub/issues/1750) Replace `iriscli gov query-params` by `iriscli params`
### Application
* [\#1336](https://github.com/irisnet/irishub/issues/1336) Ensure field length checking in the service module
* [\#1466](https://github.com/irisnet/irishub/issues/1466) Support multi-signature account
* [\#1468](https://github.com/irisnet/irishub/issues/1468) Add asset module
* [\#1493](https://github.com/irisnet/irishub/issues/1493) Back up keys using keystore file
* [\#1511](https://github.com/irisnet/irishub/issues/1511) Split the export command into reset and export
* [\#1544](https://github.com/irisnet/irishub/issues/1544) Refactor CommunityPool and BurnedCoins into AccAddresses
* [\#1568](https://github.com/irisnet/irishub/issues/1568) Optimize Dockerfile
* [\#1603](https://github.com/irisnet/irishub/issues/1603) Refactor total supply to support multiple tokens
* [\#1604](https://github.com/irisnet/irishub/issues/1604) Enhance gov TallyResult
* [\#1677](https://github.com/irisnet/irishub/issues/1677) Refactor coin_type to support multiple tokens
* [\#1728](https://github.com/irisnet/irishub/issues/1728) Refactor gov module and add proposal types `PlainText` and `TokenAddition`
* [\#1757](https://github.com/irisnet/irishub/issues/1757) Add a random number generator
* [\#1783](https://github.com/irisnet/irishub/issues/1783) Optimize error messages
* [\#1643](https://github.com/irisnet/irishub/issues/1643) Fix tx search by tx.height
* [\#1854](https://github.com/irisnet/irishub/issues/1854) Enforce unbonding_time for redelegation
* [\#1867](https://github.com/irisnet/irishub/issues/1867) Enable memo validation for "flagged" accounts
* [\#1851](https://github.com/irisnet/irishub/issues/1851) Reduce gas consumption to support larger data storage
### Tendermint
* Update to irisnet/tendermint [v0.31.0](https://github.com/irisnet/tendermint/releases/tag/v0.31.0)
* [\#1379](https://github.com/irisnet/irishub/issues/1379) [p2p] Simplify GetSelectionWithBias for addressbook
* [\#1432](https://github.com/irisnet/irishub/issues/1432) [crypto] Allow PubKeyMultisigThreshold to unmarshal into crypto.PubKey
* [\#1451](https://github.com/irisnet/irishub/issues/1451) [db] Close WriteBatch to prevent memory leak
* [\#1460](https://github.com/irisnet/irishub/issues/1460) [kms] Shut down tmkms when a validator enters proposal round crashes the app
* [\#1554](https://github.com/irisnet/irishub/issues/1554) [consensus] Log block status on replay block
* [\#1646](https://github.com/irisnet/irishub/issues/1646) [consensus] Fix possible halt by resetting TriggeredTimeoutPrecommit before starting the next height
* [\#1647](https://github.com/irisnet/irishub/issues/1647) [consensus] Flush WAL on stop to prevent data corruption during a graceful shutdown
* [\#1648](https://github.com/irisnet/irishub/issues/1648) [p2p] Fix reconnecting report duplicate ID error due to race condition between adding peer to peerSet and starting it
* [\#1649](https://github.com/irisnet/irishub/issues/1649) [p2p] Do not panic when filter times out
* [\#1650](https://github.com/irisnet/irishub/issues/1650) [p2p] Reject all-zero shared secrets in the Diffie-Hellman step of secret-connection
* [\#1660](https://github.com/irisnet/irishub/issues/1660) [instrumentation] Add chain_id label for all metrics
* [\#1665](https://github.com/irisnet/irishub/issues/1665) [rpc] Return maxPerPage if per_page is greater than max
* [\#1679](https://github.com/irisnet/irishub/issues/1679) [p2p] Fix nil pointer deference on DNS resolution failure
* [\#1692](https://github.com/irisnet/irishub/issues/1692) [blockchain] Fix pool timer leak bug
* [\#1693](https://github.com/irisnet/irishub/issues/1693) [db] Close Iterator in RemoteDB
* [\#1697](https://github.com/irisnet/irishub/issues/1697) [lite] Fix error proxy endpoints `validators` in lite client
* [\#1702](https://github.com/irisnet/irishub/issues/1702) [blockchain] Update the maxHeight when a peer is removed
* [\#1703](https://github.com/irisnet/irishub/issues/1703) [mempool] Stop gossiping tx's back to where they come from
* [\#1704](https://github.com/irisnet/irishub/issues/1704) [rpc] Disable compression for HTTP client to prevent GZIP-bomb DoS attacks
* [\#1714](https://github.com/irisnet/irishub/issues/1714) [mempool] Bound mempool memory usage
## 0.14.1
*May 31th, 2019*
### LCD (REST API)
* [\#1486](https://github.com/irisnet/irishub/issues/1486) Ensure `/bank/account/{address}` has consistent json output
* [\#1495](https://github.com/irisnet/irishub/issues/1495) Improve error handling for query parameters
### Application
* [\#1506](https://github.com/irisnet/irishub/issues/1506) Enforce `unbonding_time` regardless of validator status
## 0.14.0
*May 27th, 2019*
### LCD (REST API)
* [\#1245](https://github.com/irisnet/irishub/issues/1245) Follow best-practice URI naming guide -- API BREAKING!
* [\#1416](https://github.com/irisnet/irishub/issues/1416) Drop three useless distribution queries -- API BREAKING!
* [\#1444](https://github.com/irisnet/irishub/pull/1444) Fix `/bank/token-stats` output format -- API BREAKING!
* [\#1374](https://github.com/irisnet/irishub/issues/1374) Use `Querier` pattern to improve query implementation
* [\#1426](https://github.com/irisnet/irishub/issues/1426) Add query for community tax
* [\#1386](https://github.com/irisnet/irishub/issues/1386) Fix `memo` support bug in LCD
### CLI
* [\#1245](https://github.com/irisnet/irishub/issues/1245) Move `sign` and `broadcast` subcmd under `tx` cmd
* [\#1375](https://github.com/irisnet/irishub/issues/1375) Unify the output formats of return data
* [\#1411](https://github.com/irisnet/irishub/issues/1411) Fix incorrect json indent output for `keys` commands
* [\#1419](https://github.com/irisnet/irishub/pull/1419) Fix incorrect decimal output in plain-text format
* [\#1443](https://github.com/irisnet/irishub/issues/1443) Allow users to generate send tx offline
### Application
* [\#1383](https://github.com/irisnet/irishub/issues/1383) Improve result tags for unbond and redelegate
* [\#1409](https://github.com/irisnet/irishub/issues/1409) Fix validation bug for `community_tax` parameter
* [\#1422](https://github.com/irisnet/irishub/issues/1422) Replace dep with Go Module
### Tendermint
* Update to irisnet/tendermint [v0.28.0](https://github.com/irisnet/tendermint/releases/tag/v0.28.0)
* [\#1408](https://github.com/irisnet/irishub/issues/1408) [mempool] Fix `broadcastTxRoutine` leak
* [\#1428](https://github.com/irisnet/irishub/issues/1428) [rpc] Fix `/tx_search` bug when results are empty
* [\#1429](https://github.com/irisnet/irishub/issues/1429) [privval] Retry `RemoteSigner` connections on error
* [\#1430](https://github.com/irisnet/irishub/issues/1430) [privval] Memorize pubkey on startup
* [\#1431](https://github.com/irisnet/irishub/issues/1431) [p2p] Make `SecretConnection` thread safe
* [\#1434](https://github.com/irisnet/irishub/issues/1434) [consensus] Log `peerID` on ignored votes
* [\#1435](https://github.com/irisnet/irishub/issues/1435) [rpc] Include peer's remote IP in `/net_info`
* [\#1436](https://github.com/irisnet/irishub/issues/1436) [crypto] Update btcd fork for rare signRFC6979 bug
* [\#1438](https://github.com/irisnet/irishub/issues/1438) [privval] Fix race between sign and ping requests
* [\#1439](https://github.com/irisnet/irishub/issues/1439) [p2p] Fix MITM bug on `SecretConnection`
* [\#1440](https://github.com/irisnet/irishub/issues/1440) [node] Start `EventBus` and `IndexerService` before first block
### Documentation
* [\#1376](https://github.com/irisnet/irishub/issues/1376) Improve v0.13.1 docs
## 0.13.1
*Mar 22th, 2019*
### LCD (REST API)
* [\#1339](https://github.com/irisnet/irishub/pull/1339) Add pagination params for lcd validators query
* [\#1355](https://github.com/irisnet/irishub/pull/1355) Fix pagination error message
* [\#1360](https://github.com/irisnet/irishub/pull/1360) Add query API for delegator rewards
### CLI
* [\#1360](https://github.com/irisnet/irishub/pull/1360) Add query command for delegator rewards
### Application
* [\#1329](https://github.com/irisnet/irishub/pull/1329) Improve error message for insufficient balance
* [\#1340](https://github.com/irisnet/irishub/pull/1340) Remove coin flow tags if tx is out of gas
* [\#1341](https://github.com/irisnet/irishub/pull/1341) Check validator existence and status before getting its pubkey
* [\#1344](https://github.com/irisnet/irishub/pull/1344) Reset the init value for metrics
* [\#1354](https://github.com/irisnet/irishub/pull/1354) Fix the bug of metric data accumulation
* [\#1362](https://github.com/irisnet/irishub/pull/1362) Fix testnet build for Docker
* [\#1370](https://github.com/irisnet/irishub/pull/1370) Add more tags for Redelgate TxResult
### Tendermint
* [\#51](https://github.com/irisnet/tendermint/pull/51) Update to irisnet/Tendermint **v0.27.4**
* [\#44](https://github.com/irisnet/tendermint/pull/44) [p2p] Cleanup rejected inbound connections
* [\#45](https://github.com/irisnet/tendermint/pull/45) [consensus] Fix consensus round issue
* [\#46](https://github.com/irisnet/tendermint/pull/46) [mempool] Check max msg size in `CheckTx()`
* [\#47](https://github.com/irisnet/tendermint/pull/47) [mempool] Fix the bug of LRU cache update
* [\#48](https://github.com/irisnet/tendermint/pull/48) [p2p] Fix infinite loop in `AddrBook`
* [\#50](https://github.com/irisnet/tendermint/pull/50) [p2p] Fix FlushStop() in `MConnection`
## 0.12.3
*February 27th, 2019*
* Fix issue of build config for Ledger Nano
* Fix Dockerfile to be compatible with Ledger build
* Improve documents about address prefix/fee/chain-id for the mainnet
## 0.12.2
*February 26th, 2019*
* Fix the document issue
## 0.12.2-rc0
*February 26th, 2019*
* Set max commission rate and max commission change rate to 100%
* Implement coin flow record feature for "internal transactions"
* Support Ledger Nano S and KMS
* Update the default gas_price_threshold to be 6000iris-nano
* No slashing for Censorship or Downtime
* No slashing for non-voting for proposals
* Configure the default build environment as mainnet
* Set the default gas limit to be 50000
* Fix wrong withdraw address
* Fix gas simulate issue
* Display correct validator consensus pubkey
* Improve the documents
## 0.12.1
*February 14th, 2019*
* Fix the bug of repeatability check about evidence in the tendermint
* Change the invariant level for mainnet
## 0.12.0
*February 11th, 2019*
* [iris] Refactor and add more promethus metrics for monitor
* [iris] Enrich log message for all modules
* [iris] Close all unclosed iterators
* [iris] Add invariant check level configuration in iris.toml
* [iriscli] Add share percent in lcd unbond and redelegate
* [iriscli] Fix tx search bug by page and size query parameter name
* [iriscli] Improve error message for gov module
* [irislcd] Upgrade swagger-ui to 3.0 which can support dynamic query parameters
* [iristool] Remove monitor command
* [tendermint] Fix DynamicVerifier for large validator set changes
* [tendermint] Optimize txs search to handle huge search result
* [doc] Improve slashing document
## 0.11.0
*January 25th, 2019*
* [iris] Handle the expected abort during replay last block
* [iris] Go through and make sure all panic are reasonable
* [iris] Add the set-withdraw-address feature
* [iris] Update default param value of Upgrade Threshold and Critical Proposal
* [iris] Fix bug that evidence age doesn't take effect
* [iriscli] Improve the upgrade query-signals cmd
* [tendermint] Avoid one evidence be committed multiple times
## 0.11.0-rc0
*January 21th, 2019*
* [iris] Move the upgrade tally threshold into the software upgrade proposal
* [iris] Limit the size of transaction
* [iris] Tendermint's blockstore also needs to consume gas when storing transactions
* [iris] Proposer censorship slashing to prevent the proposer from submitting block containing garbage tx data
* [iris] The proposer must deposit 30% of the mindeposit when submitting the proposal
* [iris] Make more check about every msg's ValidateBasic()
* [iris] Add flag --output-file to save export result and ensure result is consistent
* [iris] Add new param service/TxSizeLimit to limit the service tx size
* [iris] Block mint doesn't depend on BFT time
* [iris] Fix infinite gas meter utilization during aborted ante handler executions
* [iris] Auto-config bech32 prefixes based on network type
* [iris] Improve the system logs
* [iriscli] Make the result of `iriscli tendermint tx` readable
* [iriscli] Improve the output format of the query proposals
* [iriscli] Enhance the query-signals cmd to print the accumulated signal voting power percent
* [iristool] Add support for consensus address and pubkey
## 0.10.2
*January 17th, 2019*
* [iris] The proposer must deposit 30% of the mindeposit when submitting the proposal
## 0.10.1
*January 17th, 2019*
* [iriscli] Fix issue about query validator information
* [iriscli] Fix cli query proposals error
## 0.10.0
*January 16th, 2019*
* [iris] Add flag --output-file to save export result and ensure result is consistent
* [iris] Improve invariant checking coverage and fix distribution bugs
* [iriscli] Make the result of `iriscli tendermint tx` readable
* [iriscli] Query cmd return details about software upgrade and tax usage proposal
* [tendermint] Fix the inconformity of too many evidences check
* [tendermint] Fix replay bug of `iris export`
## 0.10.0-rc0
*January 8th, 2019*
FEATURES:
* [iris] Make more validation about the `MsgCreateValidator` in CollectStdTxs
* [iris] Remove loosen token in stake pool, use bank to calculate the total loosen token
* [iris] Implement the block mint token-economics
* [iris] Add the service slash feature
* [iris] Redesign and implement the governance module to setup the new voting, tally, and penalty rules for each level of proposals
* [iris] Refactor and redefined all the gov/slashing/service/stake/distribution and gasPrice params
* [iris] Make gov data types codec wires usable across different protocol versions
* [iris] Don't export the unfinished proposals and refund the deposits of these proposals before export snapshot
* [iris] Refund service fee and deposit before export service state
* [iris] Add invariant checking level into makefile
* [iris] Only the genesis type profiler/trustee can initiate the addition or deletion (rather than prohibiting) transactions of the minor type profiler/trustee record. Everyone can view the profiler/trustee list
* [iris] Make sure the destination address is a trustee when the TaxUsage proposal execute
* [iris] Remove the record module
* [iris] Add `iris start --replay-last-block` to reset the app state by replay the last block
* [iris] Add `iris export --height` to export the snapshot of any block height even beyond the maximum cached historical version
* [iriscli] Add cli cmd to query the software upgrade signal status
* [iriscli] Make flag deposit not be required in the gov submit-proposal cmd
* [iriscli] Add token stats query cmd and lcd interface
* [iriscli] Replace decimal with int coins in distribution withdraw tags
* [iriscli] Add the sync tx broadcast type as the default mode in iriscli
* [iriscli] Add burn token cmd and lcd api
* [iriscli] Remove set-withdraw-addr sub-command
* [tendermint] Update tendermint to v0.27.3
* [test] Run cli test suite in parallel
BUG FIXES:
* Withdraw commission on self bond removal
* Use address instead of bond height / intratxcounter for deduplication
* Removal of mandatory self-delegation reward
* Fix bug of the tx result tags
* Fix absence proof verification
* Avoid to export account with no coin
* Correctly reset jailed-validator bond height / unbonding height on export-for-zero-height
* If a validator is jailed, distribute no reward to it
* Fix issue that miss checking the first one in Coins
## 0.9.1-patch01
*January 7th, 2019*
* Hotfix bug of software upgrade
## 0.9.1
*January 4th, 2019*
* Add cli cmd to query the software upgrade signal status
* Remove the text proposal
## 0.9.0
*December 27th, 2018*
* Refactor the gov types
* Make the deposit flag not be required in the gov submit-proposal cmd
* Add withdraw address into the withdraw tags list
* Fix the monitor bug
## 0.9.0-rc0
*December 19th, 2018*
BREAKING CHANGES:
* Use `iristool` to replace the original `irisdebug` and `irismon`
* `iris init` must specify moniker
FEATURES:
* [iriscli] Optimize the way tags are displayed
* [iriscli] Add `iriscli stake delegations-to [validator-addr]` and `/stake/validators/{validatorAddr}/delegations` interfaces
* [iris] Application framework code refactoring
* [iris] Add a new mechanism to distribute service fee tax
* [iris] Slashing module supports querying slashing history
* [iris] Gov module adds TxTaxUsageProposal/SoftwareHaltProposal proposals
* [iris] Export and import blockchain snapshot at any block height
* [iris] Redesigned to implement class 2 software upgrade
* [iris] Restrict the block gas limit
* [iris] Improve tx search to support multiple tags
* [iris] Improve the default behavior of iris --home
* [iris] `iris tendermint show-address` output begins with `fca`
* [iris] Restrict the number of signatures on the transaction
* [iris] Add a check for the validator private key type and reject the unsupported private key type
* [tendermint] Update tendermint to v0.27.0
BUG FIXES:
* Add chain-id value checking for sign command
* Specify the required flags for cmds `query-proposal`, `query-deposit` and `query-vote`
## 0.8.0
*December 13th, 2018*
* Upgrade tendermint to v0.27.0-dev1
## 0.8.0-rc0
*December 3rd, 2018*
BREAKING CHANGES:
* Genesis.json supports any unit format of IRIS CoinType
* The configuration information of the bech32 prefix is dynamically specified by the environment variable
* Improvement of File/directory path specification and the exception handler
FEATURES:
* Upgrade cosmos-sdk to v0.26.1-rc1 and remove the cosmos-sdk dependency
* Upgrade tendermint denpendency to v0.26.1-rc3
* View the current available withdraw balance by simulation mode
* Command line and LCD interface for service invocation request and query
* Implement guardian module for some governance proposal
* Added command add-genesis-account to configure account for genesis.json
* New proposal TerminatorProposal to terminate network consensus
## 0.7.0
*November 27th, 2018*
* Add broadcast command in bank
* Impose upgrade proposal with restrictions
* Fix bech32 prefix error in irismon
* Improve user documents
## 0.7.0-rc0
*November 19th, 2018*
BREAKING CHANGES:
* [iris] New genesis workflow
* [iris] Validator.Owner renamed to Validator. Validator operator type has now changed to sdk.ValAddress
* [iris] unsafe_reset_all, show_validator, and show_node_id have been renamed to unsafe-reset-all, show-validator, and show-node-id
* [iris]Rename "revoked" to "jailed"
* [iris]Removed CompleteUnbonding and CompleteRedelegation Msg types, and instead added unbonding/redelegation queues to endblocker
* [iris]Removed slashing for governance non-voting validators
* [iris]Validators are no longer deleted until they can no longer possibly be slashed
* [iris]Remove ibc module
* [iris]Validator set updates delayed by one block
* [iris]Drop GenesisTx in favor of a signed StdTx with only one MsgCreateValidator message
FEATURES:
* Upgrade cosmos-sdk denpendency to v0.26.0
* Upgrade tendermint denpendency to v0.26.1-rc0
* [docs]Improve docs
* [iris]Add token inflation
* [iris]Add distribution module to distribute inflation token and collected transaction fee
* [iriscli] --from can now be either an address or a key name
* [iriscli] Passing --gas=simulate triggers a simulation of the tx before the actual execution. The gas estimate obtained via the simulation will be used as gas limit in the actual execution.
* [iriscli]Add --bech to iriscli keys show and respective REST endpoint to
* [iriscli]Introduced new commission flags for validator commands create-validator and edit-validator
* [iriscli]Add commands to query validator unbondings and redelegations
* [iriscli]Add rest apis and commands for distribution
BUG FIXES:
* [iriscli]Mark --to and --amount as required flags for iriscli bank send
* [iris]Add general merkle absence proof (also for empty substores)
* [iris]Fix issue about consumed gas increasing rapidly
* [iris]Return correct Tendermint validator update set on EndBlocker by not including non previously bonded validators that have zero power
* [iris]Add commission data to MsgCreateValidator signature bytes
## 0.6.0
*November 1st, 2018*
* Use --def-chain-id flag to reference the blockchain defined of the iService
* Fix some bugs about iservice definition and record
* Add cli and lcd test for record module
* Update the user doc of iservice definition and record
## 0.6.0-rc0
*October 24th, 2018*
BREAKING CHANGES:
* [monitor] Use new executable binary in monitor
FEATURES:
* [record] Add the record module of the data certification on blockchain
* [iservice] Add the feature of iService definition
* [cli] Add the example description in the cli help
* [test] Add Cli/LCD/Sim auto-test
BUG FIXES:
* Fix software upgrade issue caused by tx fee
* Report Panic when building the lcd proof
* Fix bugs in converting validator power to byte array
* Fix panic bug in wrong account number
## 0.5.0-rc1
*October 11th, 2018*
FEATURES:
* Make all the gov and upgrade parameters can be configured in the genesis.json
BUG FIXES
* Add check for iavl proof and value before building multistore proof
## 0.5.0-rc0
*September 30th, 2018*
BREAKING CHANGES:
* [cointype] Introduce the cointype of iris:
* 1 iris = 10^18 iris-atto
* 1 iris-milli = 10^15 iris-atto
* 1 iris-micro = 10^12 iris-atto
* 1 iris-nano = 10^9 iris-atto
* 1 iris-pico = 10^6 iris-atto
* 1 iris-femto = 10^3 iris-atto
FEATURES:
* [tendermint] Upgrade to Tendermint v0.23.1-rc0
* [cosmos-sdk] Upgrade to cosmos-sdk v0.24.2
* Move the previous irisnet changeset about cosmos-sdk into irishub
* [irisdebug] Add irisdebug tool
* [LCD/cli] Add the proof verification to the LCD and CLI
* [iparam] Support the modification of governance parameters of complex data type through governance, and the submission of modified proposals through json config files
* [software-upgrade] Software upgrade solutions of the irisnet
## 0.4.2
*September 22th, 2018*
BUG FIXES
* Fix consensus failure due to the double sign evidence be broadcasted before the genesis block
## 0.4.1
*September 12th, 2018*
BUG FIXES
* Missing to set validator intraTxCount in stake genesis init
## 0.4.0
*September 6th, 2018*
BREAKING CHANGES:
* [cosmos-sdk] Upgrade to cosmos-sdk v0.23.0
* Change the address prefix format:
* cosmosaccaddr --> faa
* cosmosaccpub --> fap
* cosmosvaladdr --> fva
* cosmosvalpub --> fvp
* Adjust the Route & rootMultiStore Commit for software upgrade
* Must specify gas and fee in both command line and rest api
* The fee should be iris token and the token amount should be no less than 2*(10^10)*gas
FEATURES:
* [tendermint] Upgrade to Tendermint v0.22.6
* Store the pre-state to support the replay function
* [cosmos-sdk] Upgrade to cosmos-sdk v0.23.0
* Add the paramProposal and softwareUpgradeProposal in gov module
* Improve fee token mechanism to more reasonably deduct transaction fee and achieve more ability to defent DDOS attack.
* Introduce the global parameter module
BUG FIXES
* Default account balance in genesis
* Fix iris version issue
* Fix the unit conflict issue in slashing
* Check the voting power when create validator
* Fix evidence amimo register issue
## 0.4.0-rc2
*Sep 5th, 2018*
BUG FIXES
* Fix evidence amimo register issue
## 0.4.0-rc1
*Aug 27th, 2018*
BUG FIXES
* Default account balance in genesis
* iris version issue
* Fix the unit conflict issue in slashing
* Check the voting power when create validator
## 0.3.0
*July 30th, 2018*
BREAKING CHANGES:
* [tendermint] Upgrade to Tendermint v0.22.2
* Default ports changed from 466xx to 266xx
* ED25519 addresses are the first 20-bytes of the SHA256 of the raw 32-byte pubkey (Instead of RIPEMD160)
* [cosmos-sdk] Upgrade to cosmos-sdk v0.22.0
* [monitor] Move `iriscli monitor` subcommand to `iris monitor`
FEATURES:
* [lcd] /tx/send is now the only endpoint for posing transaction to irishub; aminofied all transaction messages
* [monitor] Improve the metrics for iris-monitor
BUG FIXES
* [cli] solve the issue of iriscli stake sign-info
##
## 0.2.0
*July 19th, 2018*
BREAKING CHANGES:
* [tendermint] Upgrade to Tendermint v0.21.0
* [cosmos-sdk] Upgrade to cosmos-sdk v0.19.1-rc1
FEATURES:
* [lcd] code refactor
* [cli] improve sendingand querying the transactions
* [monitor]export data which is collected by Prometheus Server
##
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Thank you for considering making contributions to irishub!
Contributing to this repo can mean many things such as participated in
discussion or proposing code changes. To ensure a smooth workflow for all
contributors, the general procedure for contributing has been established:
1. either [open](https://github.com/irisnet/irishub/issues/new) or
[find](https://github.com/irisnet/irishub/issues) an issue you'd like to help with,
2. participate in thoughtful discussion on that issue,
3. if you would then like to contribute code:
1. if the issue is a proposal, ensure that the proposal has been accepted,
2. ensure that nobody else has already begun working on this issue, if they have
make sure to contact them to collaborate,
3. if nobody has been assigned the issue and you would like to work on it
make a comment on the issue to inform the community of your intentions
to begin work,
4. follow standard github best practices: fork the repo,
if the issue if a bug fix, branch from the
tip of `develop`, make some commits, and submit a PR to `develop`; if the issue is a new feature, branch from the tip of `feature/XXX`, make some commits, and submit a PR to `feature/XXX`
5. include `WIP:` in the PR-title to and submit your PR early, even if it's
incomplete, this indicates to the community you're working on something and
allows them to provide comments early in the development process. When the code
is complete it can be marked as ready-for-review by replacing `WIP:` with
`R4R:` in the PR-title.
Note that for very small or blatantly obvious problems (such as typos) it is
not required to an open issue to submit a PR, but be aware that for more complex
problems/features, if a PR is opened before an adequate design discussion has
taken place in a github issue, that PR runs a high likelihood of being rejected.
Note, we use `make
get_dev_tools` and `make update_dev_tools` for installing the linting tools.Please make sure to use `gofmt` before every commit - the easiest way to do this is have your editor run it for you upon saving a file.
## Pull Requests
To accommodate review process we suggest that PRs are categorically broken up.
Ideally each PR addresses only a single issue. Additionally, as much as possible
code refactoring and cleanup should be submitted as a separate PRs. And the feature branch `feature/XXX` should be synced with `develop` regularly.
## Dependencies
We use [dep](https://github.com/golang/dep) to manage dependencies.
Since some dependencies are not under our control, a third party may break our
build, in which case we can fall back on `dep ensure` (or `make
get_vendor_deps`).
## Testing
The `Makefile` defines `make test` and includes its continuous integration. For any new comming feature, the `test_unit` / `test_cli` and `test_lcd` must be provided.
We expect tests to use `require` or `assert` rather than `t.Skip` or `t.Fail`,unless there is a reason to do otherwise.
### PR Targeting
Ensure that you base and target your PR on the correct branch:
- `release/vxx.yy` for a merge into a release candidate
- `master` for a merge of a release
- `develop` in the usual case
All feature additions should be targeted against `feature/XXX`. Bug fixes for an outstanding release candidate
should be targeted against the release candidate branch. Release candidate branches themselves should be the
only pull requests targeted directly against master.
### Development Procedure
- the latest state of development is on `develop`
- `develop` must never fail `make test`
- no --force onto `develop` (except when reverting a broken commit, which should seldom happen)
### Pull Merge Procedure
- ensure `feature/XXX` is rebased on `develop`
- ensure pull branch is rebased on `feature/XXX`
- run `make test` to ensure that all tests pass
- merge pull request
- push `feature/XXX` into `develop` regularly
### Release Procedure
- start on `develop`
- prepare changelog/release issue
- bump versions
- push to `release-vX.X.X` to run CI
- merge to master
- merge master back to develop
### Hotfix Procedure
- start on `release-vX.X.X`
- make the required changes
- these changes should be small and an absolute necessity
- add a note to CHANGELOG.md
- bump versions
- merge `release-vX.X.X` to master if necessary
- merge `release-vX.X.X` to develop if necessary
================================================
FILE: Dockerfile
================================================
#
# Build image: docker build -t irisnet/irishub:v2.1.0 --build-arg EVM_CHAIN_ID=6688 .
#
FROM golang:1.22-alpine as builder
ARG EVM_CHAIN_ID
# Set up dependencies
ENV PACKAGES make gcc git libc-dev bash linux-headers eudev-dev build-base
WORKDIR /irishub
# Add source files
COPY . .
# Install minimum necessary dependencies
RUN apk add --no-cache $PACKAGES
RUN EVM_CHAIN_ID=$EVM_CHAIN_ID make build
# ----------------------------
FROM alpine:3.18
# p2p port
EXPOSE 26656
# rpc port
EXPOSE 26657
# metrics port
EXPOSE 26660
COPY --from=builder /irishub/build/ /usr/local/bin/
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2017 IRIS Foundation Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile
================================================
#!/usr/bin/make -f
PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation')
PACKAGES_UNITTEST=$(shell go list ./... | grep -v '/simulation' | grep -v '/cli_test')
VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//')
COMMIT := $(shell git log -1 --format='%H')
LEDGER_ENABLED ?= true
BINDIR ?= $(GOPATH)/bin
SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g')
NetworkType := $(shell if [ -z ${NetworkType} ]; then echo "mainnet"; else echo ${NetworkType}; fi)
CURRENT_DIR = $(shell pwd)
PROJECT_NAME = $(shell git remote get-url origin | xargs basename -s .git)
DOCKER := $(shell which docker)
# default mainnet EVM_CHAIN_ID
EVM_CHAIN_ID ?= 6688
export GO111MODULE = on
# process build tags
build_tags = netgo
ifeq ($(LEDGER_ENABLED),true)
ifeq ($(OS),Windows_NT)
GCCEXE = $(shell where gcc.exe 2> NUL)
ifeq ($(GCCEXE),)
$(error gcc.exe not installed for ledger support, please install or set LEDGER_ENABLED=false)
else
build_tags += ledger
endif
else
UNAME_S = $(shell uname -s)
ifeq ($(UNAME_S),OpenBSD)
$(warning OpenBSD detected, disabling ledger support (https://github.com/cosmos/cosmos-sdk/issues/1988))
else
GCC = $(shell command -v gcc 2> /dev/null)
ifeq ($(GCC),)
$(error gcc not installed for ledger support, please install or set LEDGER_ENABLED=false)
else
build_tags += ledger
endif
endif
endif
endif
ifeq ($(WITH_CLEVELDB),yes)
build_tags += gcc
endif
build_tags += $(BUILD_TAGS)
build_tags := $(strip $(build_tags))
whitespace :=
whitespace += $(whitespace)
comma := ,
build_tags_comma_sep := $(subst $(whitespace),$(comma),$(build_tags))
# process linker flags
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=iris \
-X github.com/cosmos/cosmos-sdk/version.AppName=iris \
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
-X github.com/irisnet/irishub/v4/types.EIP155ChainID=$(EVM_CHAIN_ID) \
-X "github.com/cosmos/cosmos-sdk/version.BuildTags=$(build_tags_comma_sep)"
ifeq ($(WITH_CLEVELDB),yes)
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb
endif
ldflags += $(LDFLAGS)
ldflags := $(strip $(ldflags))
BUILD_FLAGS := -tags "$(build_tags)" -ldflags '$(ldflags)'
# The below include contains the tools target.
all: tools install lint
# The below include contains the tools.
include contrib/devtools/Makefile
build: check-evm-chain-id go.sum
ifeq ($(OS),Windows_NT)
@go build $(BUILD_FLAGS) -o build/iris.exe ./cmd/iris
else
@go build $(BUILD_FLAGS) -o build/iris ./cmd/iris
endif
build-linux: check-evm-chain-id go.sum
LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build
build-all-binaries: check-evm-chain-id go.sum
LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build $(BUILD_FLAGS) -o build/iris-linux-amd64 ./cmd/iris
LEDGER_ENABLED=false GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc go build $(BUILD_FLAGS) -o build/iris-linux-arm64 ./cmd/iris
build-contract-tests-hooks:
ifeq ($(OS),Windows_NT)
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests.exe ./cmd/contract_tests
else
go build -mod=readonly $(BUILD_FLAGS) -o build/contract_tests ./cmd/contract_tests
endif
install: check-evm-chain-id go.sum
@go install $(BUILD_FLAGS) ./cmd/iris
check-evm-chain-id:
@echo "note: EVM_CHAIN_ID is $(EVM_CHAIN_ID)"
update-swagger-docs: statik proto-swagger-gen
$(BINDIR)/statik -src=client/lite/swagger-ui -dest=lite -f -m
@if [ -n "$(git status --porcelain)" ]; then \
echo "\033[91mSwagger docs are out of sync!!!\033[0m";\
exit 1;\
else \
echo "\033[92mSwagger docs are in sync\033[0m";\
fi
.PHONY: update-swagger-docs
########################################
### Tools & dependencies
go-mod-cache: go.sum
@echo "--> Download go modules to local cache"
@go mod download
go.sum: go.mod
@echo "--> Ensure dependencies have not been modified"
@go mod verify
draw-deps:
@# requires brew install graphviz or apt-get install graphviz
go get github.com/RobotsAndPencils/goviz
@goviz -i ./cmd/iris -d 2 | dot -Tpng -o dependency-graph.png
clean:
rm -rf snapcraft-local.yaml build/ tmp-swagger-gen/
distclean: clean
rm -rf vendor/
###############################################################################
### Protobuf ###
###############################################################################
protoVer=0.13.0
protoImageName=ghcr.io/cosmos/proto-builder:$(protoVer)
protoImage=$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(protoImageName)
proto-all: proto-format proto-lint proto-gen
proto-gen:
@echo "Generating Protobuf files"
@$(protoImage) sh ./scripts/protocgen.sh
proto-swagger-gen:
@echo "Generating Protobuf Swagger"
@$(protoImage) sh ./scripts/protoc-swagger-gen.sh
proto-format:
@$(protoImage) find ./ -name "*.proto" -exec clang-format -i {} \;
proto-lint:
@$(protoImage) buf lint --error-format=json
########################################
### Testing
test: test-unit
test-all: test-race test-cover
test-unit:
@VERSION=$(VERSION) go test -mod=readonly -tags='ledger test_ledger_mock' ${PACKAGES_UNITTEST}
test-sim-nondeterminism-fast:
@echo "Running non-determinism test..."
@cd ${CURRENT_DIR}/app && go test -mod=readonly -run TestAppStateDeterminism -Enabled=true \
-NumBlocks=10 -BlockSize=200 -Commit=true -Period=0 -v -timeout 24h
test-sim-import-export: runsim
@echo "Running application import/export simulation. This may take several minutes..."
@cd ${CURRENT_DIR}/app && $(BINDIR)/runsim -Jobs=4 -SimAppPkg=. -ExitOnFail 50 5 TestAppImportExport
test-sim-after-import: runsim
@echo "Running application simulation-after-import. This may take several minutes..."
@cd ${CURRENT_DIR}/app && $(BINDIR)/runsim -Jobs=4 -SimAppPkg=. -ExitOnFail 50 5 TestAppSimulationAfterImport
test-race:
@VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./...
test-cover:
@go test -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./...
lint: golangci-lint
golangci-lint run
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/lite/statik/statik.go" -not -path "*.pb.go" | xargs gofmt -d -s
go mod verify
format:
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/lite/statik/statik.go" -not -path "*.pb.go" | xargs gofmt -w -s
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/lite/statik/statik.go" -not -path "*.pb.go" | xargs misspell -w
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/lite/statik/statik.go" -not -path "*.pb.go" | xargs goimports -w -local github.com/irisnet/irishub/v4
benchmark:
@go test -mod=readonly -bench=. ./...
########################################
### Local validator nodes using docker and docker-compose
testnet-init:
@if ! [ -f build/nodecluster/node0/iris/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/home irisnet/irishub iris testnet --v 4 --output-dir /home/nodecluster --chain-id irishub-test --keyring-backend test --starting-ip-address 192.168.10.2 ; fi
@echo "To install jq command, please refer to this page: https://stedolan.github.io/jq/download/"
@jq '.app_state.auth.accounts+= [{"@type":"/cosmos.auth.v1beta1.BaseAccount","address":"iaa1ljemm0yznz58qxxs8xyak7fashcfxf5lgl4zjx","pub_key":null,"account_number":"0","sequence":"0"}] | .app_state.bank.balances+= [{"address":"iaa1ljemm0yznz58qxxs8xyak7fashcfxf5lgl4zjx","coins":[{"denom":"uiris","amount":"1000000000000"}]}]' build/nodecluster/node0/iris/config/genesis.json > build/genesis_temp.json ;
@sudo cp build/genesis_temp.json build/nodecluster/node0/iris/config/genesis.json
@sudo cp build/genesis_temp.json build/nodecluster/node1/iris/config/genesis.json
@sudo cp build/genesis_temp.json build/nodecluster/node2/iris/config/genesis.json
@sudo cp build/genesis_temp.json build/nodecluster/node3/iris/config/genesis.json
@rm build/genesis_temp.json
@echo "Faucet address: iaa1ljemm0yznz58qxxs8xyak7fashcfxf5lgl4zjx" ;
@echo "Faucet coin amount: 1000000000000uiris"
@echo "Faucet key seed: tube lonely pause spring gym veteran know want grid tired taxi such same mesh charge orient bracket ozone concert once good quick dry boss"
testnet-start:
docker-compose up -d
testnet-stop:
docker-compose down
testnet-clean:
docker-compose down
sudo rm -rf build/*
########################################
### Test ibc nft-transfer
init-golang-rly: kill-dev install
@echo "Initializing both blockchains..."
./network/init.sh
./network/start.sh
@echo "Initializing relayer..."
./network/relayer/interchain-nft-config/rly.sh
start:
@echo "Starting up test network"
./network/start.sh
start-rly:
./network/hermes/start.sh
kill-dev:
@echo "Killing nftd and removing previous data"
-@rm -rf ./data
-@killall nftd 2>/dev/null
================================================
FILE: README.md
================================================
# IRIShub

[](https://github.com/irisnet/irishub/blob/master/LICENSE)
[](https://github.com/irisnet/irishub/releases)
[](https://goreportcard.com/report/github.com/irisnet/irishub)
[](https://forum.irisnet.org/)
IRIS network (a.k.a. IRISnet) aims to establish a technology foundation to facilitate construction of next-generation distributed applications. By incorporating a comprehensive service infrastructure and an enhanced IBC protocol into the Tendermint & Cosmos stack, IRISnet enables service interoperability as well as token transfers across an internet of blockchains.
As the centerpiece of IRISnet, IRIS Hub (a.k.a. IRIShub) will be the first regional hub connecting to the main Cosmos Hub, thus making IRISnet an inseparable part of the whole Cosmos network.
## IRIS Hub Mainnet
To join the mainnet, follow [this guide](https://www.irisnet.org/docs/get-started/mainnet.html).
## Install
See the [install instructions](https://www.irisnet.org/docs/get-started/install.html).
## Resources
* Explorer: <https://irishub.iobscan.io/>
* Discord: <https://discord.gg/rUVw3RWfKp>
## How To Contribute
See the [contributing](./CONTRIBUTING.md).
================================================
FILE: RELEASE.md
================================================
# v4.0.3
## What's Changed
* bump cometbft from v0.38.15 to v0.38.21 by @oncloudit in https://github.com/irisnet/irishub/pull/2999
* bump ubuntu in GitHub Actions from 20.04 to 22.04 by @oncloudit in https://github.com/irisnet/irishub/pull/3007
**Full Changelog**: https://github.com/irisnet/irishub/compare/v4.0.1...v4.0.3
================================================
FILE: app/ante/ante.go
================================================
package ante
import (
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
ethante "github.com/evmos/ethermint/app/ante"
)
// NewAnteHandler returns an ante handler responsible for attempting to route an
// Ethereum or SDK transaction to an internal ante handler for performing
// transaction-level processing (e.g. fee payment, signature verification) before
// being passed onto it's respective handler.
func NewAnteHandler(options HandlerOptions) sdk.AnteHandler {
return func(
ctx sdk.Context, tx sdk.Tx, sim bool,
) (newCtx sdk.Context, err error) {
var anteHandler sdk.AnteHandler
defer ethante.Recover(ctx.Logger(), &err)
txWithExtensions, ok := tx.(authante.HasExtensionOptionsTx)
if ok {
opts := txWithExtensions.GetExtensionOptions()
if len(opts) > 0 {
switch typeURL := opts[0].GetTypeUrl(); typeURL {
case "/ethermint.evm.v1.ExtensionOptionsEthereumTx":
// handle as *evmtypes.MsgEthereumTx
anteHandler = newEthAnteHandler(options)
case "/ethermint.types.v1.ExtensionOptionsWeb3Tx":
// handle as normal Cosmos SDK tx, except signature is checked for EIP712 representation
anteHandler = newCosmosAnteHandlerEip712(options)
default:
return ctx, errorsmod.Wrapf(
errortypes.ErrUnknownExtensionOptions,
"rejecting tx with unsupported extension option: %s", typeURL,
)
}
return anteHandler(ctx, tx, sim)
}
}
// handle as totally normal Cosmos SDK tx
switch tx.(type) {
case sdk.Tx:
anteHandler = newCosmosAnteHandler(options)
default:
return ctx, errorsmod.Wrapf(errortypes.ErrUnknownRequest, "invalid transaction type: %T", tx)
}
return anteHandler(ctx, tx, sim)
}
}
================================================
FILE: app/ante/decorators.go
================================================
package ante
import (
"strings"
sdkerrors "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
coinswaptypes "mods.irisnet.org/modules/coinswap/types"
servicetypes "mods.irisnet.org/modules/service/types"
tokenkeeper "mods.irisnet.org/modules/token/keeper"
tokentypesv1 "mods.irisnet.org/modules/token/types/v1"
tokentypesv1beta1 "mods.irisnet.org/modules/token/types/v1beta1"
)
// ValidateTokenDecorator is responsible for restricting the token participation of the swap prefix
type ValidateTokenDecorator struct {
tk tokenkeeper.Keeper
}
// NewValidateTokenDecorator returns an instance of ValidateTokenDecorator
func NewValidateTokenDecorator(tk tokenkeeper.Keeper) ValidateTokenDecorator {
return ValidateTokenDecorator{
tk: tk,
}
}
// AnteHandle checks the transaction
func (vtd ValidateTokenDecorator) AnteHandle(
ctx sdk.Context,
tx sdk.Tx,
simulate bool,
next sdk.AnteHandler,
) (sdk.Context, error) {
for _, msg := range tx.GetMsgs() {
switch msg := msg.(type) {
case *ibctransfertypes.MsgTransfer:
if containSwapCoin(msg.Token) {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "can't transfer coinswap liquidity tokens through the IBC module")
}
case *tokentypesv1.MsgBurnToken:
if _, err := vtd.tk.GetToken(ctx, msg.Coin.Denom); err != nil {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "burnt failed, only native tokens can be burnt")
}
case *tokentypesv1beta1.MsgBurnToken:
if _, err := vtd.tk.GetToken(ctx, msg.Symbol); err != nil {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "burnt failed, only native tokens can be burnt")
}
case *govv1.MsgSubmitProposal:
if containSwapCoin(msg.InitialDeposit...) {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "can't deposit coinswap liquidity token for proposal")
}
case *govv1.MsgDeposit:
if containSwapCoin(msg.Amount...) {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "can't deposit coinswap liquidity token for proposal")
}
}
}
return next(ctx, tx, simulate)
}
// ValidateServiceDecorator is responsible for checking the permission to execute MsgCallService
type ValidateServiceDecorator struct {
SimulateTest bool
}
// NewValidateServiceDecorator returns an instance of ServiceAuthDecorator
func NewValidateServiceDecorator(simulateTest bool) ValidateServiceDecorator {
return ValidateServiceDecorator{
SimulateTest: simulateTest,
}
}
// AnteHandle checks the transaction
func (vsd ValidateServiceDecorator) AnteHandle(
ctx sdk.Context,
tx sdk.Tx,
simulate bool,
next sdk.AnteHandler,
) (sdk.Context, error) {
if vsd.SimulateTest {
return next(ctx, tx, simulate)
}
for _, msg := range tx.GetMsgs() {
switch msg := msg.(type) {
case *servicetypes.MsgCallService:
if msg.Repeated {
return ctx, sdkerrors.Wrap(errortypes.ErrInvalidRequest, "currently does not support to create repeatable service invocation")
}
}
}
return next(ctx, tx, simulate)
}
func containSwapCoin(coins ...sdk.Coin) bool {
for _, coin := range coins {
if strings.HasPrefix(coin.Denom, coinswaptypes.LptTokenPrefix) {
return true
}
}
return false
}
================================================
FILE: app/ante/handler_options.go
================================================
package ante
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
ibcante "github.com/cosmos/ibc-go/v8/modules/core/ante"
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
ethante "github.com/evmos/ethermint/app/ante"
oraclekeeper "mods.irisnet.org/modules/oracle/keeper"
tokenkeeper "mods.irisnet.org/modules/token/keeper"
guardiankeeper "github.com/irisnet/irishub/v4/modules/guardian/keeper"
)
// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC
// channel keeper.
type HandlerOptions struct {
ante.HandlerOptions
BankKeeper bankkeeper.Keeper
AccountKeeper authkeeper.AccountKeeper
IBCKeeper *ibckeeper.Keeper
TokenKeeper tokenkeeper.Keeper
OracleKeeper oraclekeeper.Keeper
GuardianKeeper guardiankeeper.Keeper
EvmKeeper ethante.EVMKeeper
FeeMarketKeeper ethante.FeeMarketKeeper
BypassMinFeeMsgTypes []string
MaxTxGasWanted uint64
SimulationTest bool
}
// newCosmosAnteHandler creates the default ante handler for Ethereum transactions
func newEthAnteHandler(options HandlerOptions) sdk.AnteHandler {
return sdk.ChainAnteDecorators(
ethante.NewEthSetUpContextDecorator(
options.EvmKeeper,
), // outermost AnteDecorator. SetUpContext must be called first
ethante.NewEthMempoolFeeDecorator(
options.EvmKeeper,
), // Check eth effective gas price against the node's minimal-gas-prices config
ethante.NewEthMinGasPriceDecorator(
options.FeeMarketKeeper,
options.EvmKeeper,
), // Check eth effective gas price against the global MinGasPrice
ethante.NewEthValidateBasicDecorator(options.EvmKeeper),
ethante.NewEthSigVerificationDecorator(options.EvmKeeper),
ethante.NewEthAccountVerificationDecorator(options.AccountKeeper, options.EvmKeeper),
ethante.NewEthFeeGrantValidator(options.EvmKeeper, options.FeegrantKeeper),
ethante.NewCanTransferDecorator(options.EvmKeeper),
ethante.NewEthGasConsumeDecorator(options.EvmKeeper, options.MaxTxGasWanted),
ethante.NewEthIncrementSenderSequenceDecorator(options.AccountKeeper),
ethante.NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
ethante.NewEthEmitEventDecorator(
options.EvmKeeper,
), // emit eth tx hash and index at the very last ante handler.
)
}
// newCosmosAnteHandler creates the default ante handler for Cosmos transactions
func newCosmosAnteHandler(options HandlerOptions) sdk.AnteHandler {
return sdk.ChainAnteDecorators(
RejectMessagesDecorator{},
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker),
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
ante.NewDeductFeeDecorator(
options.AccountKeeper,
options.BankKeeper,
options.FeegrantKeeper,
options.TxFeeChecker,
),
ante.NewSetPubKeyDecorator(
options.AccountKeeper,
), // SetPubKeyDecorator must be called before all signature verification decorators
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, DefaultSigVerificationGasConsumer),
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
NewValidateTokenDecorator(options.TokenKeeper),
tokenkeeper.NewValidateTokenFeeDecorator(options.TokenKeeper, options.BankKeeper),
oraclekeeper.NewValidateOracleAuthDecorator(options.OracleKeeper, options.GuardianKeeper),
NewValidateServiceDecorator(options.SimulationTest),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewRedundantRelayDecorator(options.IBCKeeper),
)
}
// newCosmosAnteHandlerEip712 creates the ante handler for transactions signed with EIP712
func newCosmosAnteHandlerEip712(options HandlerOptions) sdk.AnteHandler {
return sdk.ChainAnteDecorators(
ethante.RejectMessagesDecorator{}, // reject MsgEthereumTxs
ante.NewSetUpContextDecorator(),
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ethante.NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
ante.NewValidateMemoDecorator(options.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
ante.NewDeductFeeDecorator(
options.AccountKeeper,
options.BankKeeper,
options.FeegrantKeeper,
options.TxFeeChecker,
),
// SetPubKeyDecorator must be called before all signature verification decorators
ante.NewSetPubKeyDecorator(options.AccountKeeper),
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
// Note: signature verification uses EIP instead of the cosmos signature validator
ethante.NewLegacyEip712SigVerificationDecorator(
options.AccountKeeper,
options.SignModeHandler,
),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewRedundantRelayDecorator(options.IBCKeeper),
ethante.NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
)
}
================================================
FILE: app/ante/reject_msgs.go
================================================
package ante
import (
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
evmtypes "github.com/evmos/ethermint/x/evm/types"
)
// RejectMessagesDecorator prevents invalid msg types from being executed
type RejectMessagesDecorator struct{}
// AnteHandle rejects the following messages:
// 1. Messages that requires ethereum-specific authentication.
// For example `MsgEthereumTx` requires fee to be deducted in the antehandler in
// order to perform the refund.
// 2. Messages that creates vesting accounts.
func (rmd RejectMessagesDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
for _, msg := range tx.GetMsgs() {
switch msg.(type) {
case *evmtypes.MsgEthereumTx:
return ctx, errorsmod.Wrapf(
errortypes.ErrInvalidType,
"MsgEthereumTx needs to be contained within a tx with 'ExtensionOptionsEthereumTx' option",
)
case *vestingtypes.MsgCreateVestingAccount,
*vestingtypes.MsgCreatePermanentLockedAccount,
*vestingtypes.MsgCreatePeriodicVestingAccount:
return ctx, errorsmod.Wrap(
errortypes.ErrInvalidType,
"currently doesn't support creating vesting account")
}
}
return next(ctx, tx, simulate)
}
================================================
FILE: app/ante/sigverify.go
================================================
package ante
import (
"fmt"
storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/evmos/ethermint/crypto/ethsecp256k1"
)
const (
secp256k1VerifyCost uint64 = 21000
)
// DefaultSigVerificationGasConsumer is the default implementation of SignatureVerificationGasConsumer. It consumes gas
// for signature verification based upon the public key type. The cost is fetched from the given params and is matched
// by the concrete type.
func DefaultSigVerificationGasConsumer(
meter storetypes.GasMeter, sig signing.SignatureV2, params authtypes.Params,
) error {
pubkey := sig.PubKey
switch pubkey := pubkey.(type) {
case *ethsecp256k1.PubKey:
meter.ConsumeGas(secp256k1VerifyCost, "ante verify: eth_secp256k1")
return nil
case multisig.PubKey:
// Multisig keys
multisignature, ok := sig.Data.(*signing.MultiSignatureData)
if !ok {
return fmt.Errorf("expected %T, got, %T", &signing.MultiSignatureData{}, sig.Data)
}
return ConsumeMultisignatureVerificationGas(meter, multisignature, pubkey, params, sig.Sequence)
default:
return authante.DefaultSigVerificationGasConsumer(meter, sig, params)
}
}
// ConsumeMultisignatureVerificationGas consumes gas from a GasMeter for verifying a multisig pubkey signature
func ConsumeMultisignatureVerificationGas(
meter storetypes.GasMeter, sig *signing.MultiSignatureData, pubkey multisig.PubKey,
params authtypes.Params, accSeq uint64,
) error {
size := sig.BitArray.Count()
sigIndex := 0
for i := 0; i < size; i++ {
if !sig.BitArray.GetIndex(i) {
continue
}
sigV2 := signing.SignatureV2{
PubKey: pubkey.GetPubKeys()[i],
Data: sig.Signatures[sigIndex],
Sequence: accSeq,
}
err := DefaultSigVerificationGasConsumer(meter, sigV2, params)
if err != nil {
return err
}
sigIndex++
}
return nil
}
================================================
FILE: app/app.go
================================================
package app
import (
"encoding/json"
"fmt"
"io"
"os"
abci "github.com/cometbft/cometbft/abci/types"
tmjson "github.com/cometbft/cometbft/libs/json"
tmos "github.com/cometbft/cometbft/libs/os"
"github.com/spf13/cast"
"cosmossdk.io/client/v2/autocli"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/log"
upgradetypes "cosmossdk.io/x/upgrade/types"
dbm "github.com/cosmos/cosmos-db"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"
nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/server"
"github.com/cosmos/cosmos-sdk/server/api"
"github.com/cosmos/cosmos-sdk/server/config"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/mempool"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/types/msgservice"
sigtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/crisis"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/cosmos/gogoproto/proto"
srvflags "github.com/evmos/ethermint/server/flags"
irishubante "github.com/irisnet/irishub/v4/app/ante"
"github.com/irisnet/irishub/v4/app/keepers"
"github.com/irisnet/irishub/v4/app/params"
"github.com/irisnet/irishub/v4/app/rpc"
"github.com/irisnet/irishub/v4/client/lite"
iristypes "github.com/irisnet/irishub/v4/types"
)
var (
_ runtime.AppI = (*IrisApp)(nil)
_ servertypes.Application = (*IrisApp)(nil)
)
// IrisApp extends an ABCI application, but with most of its parameters exported.
// They are exported for convenience in creating helper functions, as object
// capabilities aren't needed for testing.
type IrisApp struct {
*baseapp.BaseApp
keepers.AppKeepers
configurator module.Configurator
interfaceRegistry types.InterfaceRegistry
codec codec.Codec
txConfig client.TxConfig
legacyAmino *codec.LegacyAmino
// the module manager
mm *module.Manager
bm module.BasicManager
// simulation manager
sm *module.SimulationManager
}
// NewIrisApp returns a reference to an initialized IrisApp.
func NewIrisApp(
logger log.Logger,
db dbm.DB,
traceStore io.Writer,
loadLatest bool,
appOpts servertypes.AppOptions,
baseAppOptions ...func(*baseapp.BaseApp),
) *IrisApp {
encodingConfig := params.MakeEncodingConfig()
appCodec := encodingConfig.Codec
legacyAmino := encodingConfig.LegacyAmino
interfaceRegistry := encodingConfig.InterfaceRegistry
txConfig := encodingConfig.TxConfig
// Setup Mempool
baseAppOptions = append(baseAppOptions, NoOpMempoolOption())
bApp := baseapp.NewBaseApp(
iristypes.AppName,
logger,
db,
txConfig.TxDecoder(),
baseAppOptions...,
)
bApp.SetCommitMultiStoreTracer(traceStore)
bApp.SetVersion(version.Version)
bApp.SetInterfaceRegistry(interfaceRegistry)
app := &IrisApp{
BaseApp: bApp,
codec: appCodec,
interfaceRegistry: interfaceRegistry,
txConfig: txConfig,
legacyAmino: legacyAmino,
}
// get skipUpgradeHeights from the app options
skipUpgradeHeights := map[int64]bool{}
for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) {
skipUpgradeHeights[int64(h)] = true
}
// Setup keepers
app.AppKeepers = keepers.New(
appCodec,
bApp,
legacyAmino,
maccPerms,
app.ModuleAccountAddrs(),
app.BlockedModuleAccountAddrs(),
skipUpgradeHeights,
cast.ToString(appOpts.Get(flags.FlagHome)),
cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)),
logger,
appOpts,
)
/**** Module Options ****/
skipGenesisInvariants := false
opt := appOpts.Get(crisis.FlagSkipGenesisInvariants)
if opt, ok := opt.(bool); ok {
skipGenesisInvariants = opt
}
// NOTE: Any module instantiated in the module manager that is later modified
// must be passed by reference here.
app.mm = module.NewManager(appModules(app, encodingConfig, skipGenesisInvariants)...)
app.bm = newBasicManagerFromManager(app)
enabledSignModes := append([]sigtypes.SignMode(nil), authtx.DefaultSignModes...)
enabledSignModes = append(enabledSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL)
txConfigOpts := authtx.ConfigOptions{
EnabledSignModes: enabledSignModes,
TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(app.BankKeeper),
}
txConfig, err := authtx.NewTxConfigWithOptions(
appCodec,
txConfigOpts,
)
if err != nil {
panic(err)
}
app.txConfig = txConfig
// NOTE: upgrade module is required to be prioritized
app.mm.SetOrderPreBlockers(
upgradetypes.ModuleName,
)
// During begin block slashing happens after distr.BeginBlocker so that
// there is nothing left over in the validator fee pool, so as to keep the
// CanWithdrawInvariant invariant.
// NOTE: staking module is required if HistoricalEntries param > 0
app.mm.SetOrderBeginBlockers(orderBeginBlockers()...)
app.mm.SetOrderEndBlockers(orderEndBlockers()...)
// NOTE: The genutils module must occur after staking so that pools are
// properly initialized with tokens from genesis accounts.
// NOTE: The genutils module must also occur after auth so that it can access the params from auth.
// NOTE: Capability module must occur first so that it can initialize any capabilities
// so that other modules that want to create or claim capabilities afterwards in InitChain
// can do so safely.
app.mm.SetOrderInitGenesis(orderInitBlockers()...)
app.mm.SetOrderExportGenesis(orderInitBlockers()...)
app.configurator = module.NewConfigurator(
appCodec,
app.MsgServiceRouter(),
app.GRPCQueryRouter(),
)
app.mm.RegisterInvariants(app.CrisisKeeper)
// app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
// app.mm.RegisterServices(app.configurator)
app.RegisterServices()
// create the simulation manager and define the order of the modules for deterministic simulations
//
// NOTE: this is not required apps that don't use the simulator for fuzz testing
// transactions
app.sm = module.NewSimulationManager(
simulationModules(app, encodingConfig, skipGenesisInvariants)...)
app.sm.RegisterStoreDecoders()
// initialize stores
app.MountKVStores(app.KvStoreKeys())
app.MountTransientStores(app.TransientStoreKeys())
app.MountMemoryStores(app.MemoryStoreKeys())
maxGasWanted := cast.ToUint64(appOpts.Get(srvflags.EVMMaxTxGasWanted))
simulationTest := false
opt = appOpts.Get(params.SimulationTest)
if opt, ok := opt.(bool); ok {
simulationTest = opt
}
anteHandler := irishubante.NewAnteHandler(
irishubante.HandlerOptions{
HandlerOptions: ante.HandlerOptions{
AccountKeeper: app.AccountKeeper,
BankKeeper: app.BankKeeper,
FeegrantKeeper: app.FeeGrantKeeper,
SignModeHandler: txConfig.SignModeHandler(),
},
AccountKeeper: app.AccountKeeper,
BankKeeper: app.BankKeeper,
IBCKeeper: app.IBCKeeper,
TokenKeeper: app.TokenKeeper,
OracleKeeper: app.OracleKeeper,
GuardianKeeper: app.GuardianKeeper,
EvmKeeper: app.EvmKeeper,
FeeMarketKeeper: app.FeeMarketKeeper,
BypassMinFeeMsgTypes: []string{},
MaxTxGasWanted: maxGasWanted,
SimulationTest: simulationTest,
},
)
app.Init()
app.SetAnteHandler(anteHandler)
app.SetInitChainer(app.InitChainer)
app.SetPreBlocker(app.PreBlocker)
app.SetBeginBlocker(app.BeginBlocker)
app.SetEndBlocker(app.EndBlocker)
app.RegisterUpgradePlans()
// At startup, after all modules have been registered, check that all prot
// annotations are correct.
protoFiles, err := proto.MergedRegistry()
if err != nil {
panic(err)
}
err = msgservice.ValidateProtoAnnotations(protoFiles)
if err != nil {
// Once we switch to using protoreflect-based antehandlers, we might
// want to panic here instead of logging a warning.
fmt.Fprintln(os.Stderr, err.Error())
}
if loadLatest {
if err := app.LoadLatestVersion(); err != nil {
tmos.Exit(err.Error())
}
// Initialize and seal the capability keeper so all persistent capabilities
// are loaded in-memory and prevent any further modules from creating scoped
// sub-keepers.
// This must be done during creation of baseapp rather than in InitChain so
// that in-memory capabilities get regenerated on app restart.
// Note that since this reads from the store, we can only perform it when
// `loadLatest` is set to true.
app.CapabilityKeeper.Seal()
}
return app
}
// Name returns the name of the App
func (app *IrisApp) Name() string { return app.BaseApp.Name() }
// PreBlocker application updates every pre block
func (app *IrisApp) PreBlocker(ctx sdk.Context, _ *abci.RequestFinalizeBlock) (*sdk.ResponsePreBlock, error) {
return app.mm.PreBlock(ctx)
}
// BeginBlocker application updates every begin block
func (app *IrisApp) BeginBlocker(ctx sdk.Context) (sdk.BeginBlock, error) {
return app.mm.BeginBlock(ctx)
}
// EndBlocker application updates every end block
func (app *IrisApp) EndBlocker(ctx sdk.Context) (sdk.EndBlock, error) {
return app.mm.EndBlock(ctx)
}
// InitChainer application update at chain initialization
func (app *IrisApp) InitChainer(ctx sdk.Context, req *abci.RequestInitChain) (*abci.ResponseInitChain, error) {
var genesisState iristypes.GenesisState
if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil {
return nil, err
}
if err := app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()); err != nil {
return nil, err
}
return app.mm.InitGenesis(ctx, app.codec, genesisState)
}
// LoadHeight loads a particular height
func (app *IrisApp) LoadHeight(height int64) error {
return app.LoadVersion(height)
}
// ModuleAccountAddrs returns all the app's module account addresses.
func (app *IrisApp) ModuleAccountAddrs() map[string]bool {
modAccAddrs := make(map[string]bool)
for acc := range maccPerms {
modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true
}
return modAccAddrs
}
// BlockedModuleAccountAddrs returns all the app's blocked module account
// addresses.
func (app *IrisApp) BlockedModuleAccountAddrs() map[string]bool {
modAccAddrs := app.ModuleAccountAddrs()
// remove module accounts that are ALLOWED to received funds
delete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String())
return modAccAddrs
}
// LegacyAmino returns SimApp's amino codec.
//
// NOTE: This is solely to be used for testing purposes as it may be desirable
// for modules to register their own custom testing types.
func (app *IrisApp) LegacyAmino() *codec.LegacyAmino {
return app.legacyAmino
}
// AppCodec returns IrisApp's app codec.
//
// NOTE: This is solely to be used for testing purposes as it may be desirable
// for modules to register their own custom testing types.
func (app *IrisApp) AppCodec() codec.Codec {
return app.codec
}
// InterfaceRegistry returns IrisApp's InterfaceRegistry
func (app *IrisApp) InterfaceRegistry() types.InterfaceRegistry {
return app.interfaceRegistry
}
// EncodingConfig returns IrisApp's EncodingConfig
func (app *IrisApp) EncodingConfig() params.EncodingConfig {
return params.EncodingConfig{
InterfaceRegistry: app.interfaceRegistry,
LegacyAmino: app.legacyAmino,
Codec: app.codec,
TxConfig: app.txConfig,
}
}
// SimulationManager implements the SimulationApp interface
func (app *IrisApp) SimulationManager() *module.SimulationManager {
return app.sm
}
// BasicManager return the basic manager
func (app *IrisApp) BasicManager() module.BasicManager {
return app.bm
}
// RegisterAPIRoutes registers all application module routes with the provided API server.
func (app *IrisApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
clientCtx := apiSvr.ClientCtx
// Register new tx routes from grpc-gateway.
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
// Register new tendermint queries routes from grpc-gateway.
cmtservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
// Register node gRPC service for grpc-gateway.
nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
// Register grpc-gateway routes for all modules.
app.bm.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
// register swagger API from root so that other applications can override easily
if apiConfig.Swagger {
lite.RegisterSwaggerAPI(clientCtx, apiSvr.Router)
}
}
// RegisterServices implements the Application.RegisterTxService method.
func (app *IrisApp) RegisterServices() {
for _, mod := range app.mm.Modules {
m, ok := mod.(module.AppModule)
if !ok {
panic("unable to cast mod into AppModule")
}
rpc.RegisterService(app.codec, m, app.configurator, app.AppKeepers)
}
}
// RegisterTxService implements the Application.RegisterTxService method.
func (app *IrisApp) RegisterTxService(clientCtx client.Context) {
authtx.RegisterTxService(
app.BaseApp.GRPCQueryRouter(),
clientCtx,
app.BaseApp.Simulate,
app.interfaceRegistry,
)
}
// RegisterTendermintService implements the Application.RegisterTendermintService method.
func (app *IrisApp) RegisterTendermintService(clientCtx client.Context) {
cmtservice.RegisterTendermintService(
clientCtx,
app.BaseApp.GRPCQueryRouter(),
app.interfaceRegistry,
app.Query,
)
}
// RegisterNodeService registers the node service.
//
// It takes a client context as a parameter and does not return anything.
func (app *IrisApp) RegisterNodeService(clientCtx client.Context, c config.Config) {
nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter(), c)
}
// DefaultGenesis returns a default genesis from the registered AppModuleBasic's.
func (app *IrisApp) DefaultGenesis() map[string]json.RawMessage {
return app.bm.DefaultGenesis(app.AppCodec())
}
// Init initializes the IrisApp.
func (app *IrisApp) Init() {
iristypes.InjectCodec(app.legacyAmino, app.interfaceRegistry)
}
// AutoCliOpts returns the autocli options for the app.
func (app *IrisApp) AutoCliOpts() autocli.AppOptions {
modules := make(map[string]appmodule.AppModule, 0)
for _, m := range app.mm.Modules {
if moduleWithName, ok := m.(module.HasName); ok {
moduleName := moduleWithName.Name()
if appModule, ok := moduleWithName.(appmodule.AppModule); ok {
modules[moduleName] = appModule
}
}
}
return autocli.AppOptions{
Modules: modules,
AddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()),
ValidatorAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()),
ConsensusAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()),
}
}
// NoOpMempoolOption returns a function that sets up a no-op mempool for the given BaseApp.
//
// The function takes a pointer to a BaseApp as a parameter and returns nothing.
func NoOpMempoolOption() func(*baseapp.BaseApp) {
return func(app *baseapp.BaseApp) {
memPool := mempool.NoOpMempool{}
app.SetMempool(memPool)
handler := baseapp.NewDefaultProposalHandler(memPool, app)
app.SetPrepareProposal(handler.PrepareProposalHandler())
app.SetProcessProposal(handler.ProcessProposalHandler())
}
}
================================================
FILE: app/encoding.go
================================================
package app
// RegisterEncodingConfig registers concrete types on codec
// func RegisterEncodingConfig() params.EncodingConfig {
// encodingConfig := params.MakeEncodingConfig()
// enccodec.RegisterLegacyAminoCodec(encodingConfig.Amino)
// enccodec.RegisterInterfaces(encodingConfig.InterfaceRegistry)
// return encodingConfig
// }
================================================
FILE: app/export.go
================================================
package app
import (
"encoding/json"
"fmt"
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
storetypes "cosmossdk.io/store/types"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
sdk "github.com/cosmos/cosmos-sdk/types"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
"github.com/cosmos/cosmos-sdk/x/staking"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"mods.irisnet.org/modules/htlc"
"mods.irisnet.org/modules/oracle"
"mods.irisnet.org/modules/random"
"mods.irisnet.org/modules/service"
)
// ExportAppStateAndValidators exports the state of the application for a genesis file.
func (app *IrisApp) ExportAppStateAndValidators(
forZeroHeight bool, jailAllowedAddrs []string,
modulesToExport []string,
) (servertypes.ExportedApp, error) {
// as if they could withdraw from the start of the next block
ctx := app.NewContextLegacy(true, tmproto.Header{Height: app.LastBlockHeight()})
// We export at last height + 1, because that's the height at which
// Tendermint will start InitChain.
height := app.LastBlockHeight() + 1
if forZeroHeight {
height = 0
app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs)
} else {
// NOTE: service currently does not support non-ZeroHeight export
service.PrepForZeroHeightGenesis(ctx, app.ServiceKeeper)
}
genState, err := app.mm.ExportGenesisForModules(ctx, app.codec, modulesToExport)
if err != nil {
return servertypes.ExportedApp{}, err
}
appState, err := json.MarshalIndent(genState, "", " ")
if err != nil {
return servertypes.ExportedApp{}, err
}
validators, err := staking.WriteValidators(ctx, app.StakingKeeper)
return servertypes.ExportedApp{
AppState: appState,
Validators: validators,
Height: height,
ConsensusParams: app.BaseApp.GetConsensusParams(ctx),
}, err
}
// prepare for fresh start at zero height
// NOTE zero height genesis is a temporary feature which will be deprecated
//
// in favour of export at a block height
func (app *IrisApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) {
applyAllowedAddrs := false
// check if there is a allowed address list
if len(jailAllowedAddrs) > 0 {
applyAllowedAddrs = true
}
allowedAddrsMap := make(map[string]bool)
for _, addr := range jailAllowedAddrs {
_, err := app.InterfaceRegistry().SigningContext().ValidatorAddressCodec().StringToBytes(addr)
if err != nil {
panic(err)
}
allowedAddrsMap[addr] = true
}
/* Just to be safe, assert the invariants on current state. */
app.CrisisKeeper.AssertInvariants(ctx)
/* Handle fee distribution state. */
// withdraw all validator commission
err := app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) {
valBz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator())
if err != nil {
panic(err)
}
_, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, valBz)
return false
})
if err != nil {
panic(err)
}
// withdraw all delegator rewards
dels, err := app.StakingKeeper.GetAllDelegations(ctx)
if err != nil {
panic(err)
}
for _, delegation := range dels {
valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress)
if err != nil {
panic(err)
}
delAddr := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
_, _ = app.DistrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr)
}
// clear validator slash events
app.DistrKeeper.DeleteAllValidatorSlashEvents(ctx)
// clear validator historical rewards
app.DistrKeeper.DeleteAllValidatorHistoricalRewards(ctx)
// set context height to zero
height := ctx.BlockHeight()
ctx = ctx.WithBlockHeight(0)
// reinitialize all validators
err = app.StakingKeeper.IterateValidators(
ctx,
func(_ int64, val stakingtypes.ValidatorI) (stop bool) {
valBz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator())
if err != nil {
panic(err)
}
// donate any unwithdrawn outstanding reward fraction tokens to the community pool
scraps, err := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, valBz)
if err != nil {
panic(err)
}
feePool, err := app.DistrKeeper.FeePool.Get(ctx)
if err != nil {
panic(err)
}
feePool.CommunityPool = feePool.CommunityPool.Add(scraps...)
if err := app.DistrKeeper.FeePool.Set(ctx, feePool); err != nil {
panic(err)
}
if err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, valBz); err != nil {
panic(err)
}
return false
},
)
if err != nil {
panic(err)
}
// reinitialize all delegations
for _, del := range dels {
valAddr, err := sdk.ValAddressFromBech32(del.ValidatorAddress)
if err != nil {
panic(err)
}
delAddr := sdk.MustAccAddressFromBech32(del.DelegatorAddress)
if err := app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr); err != nil {
// never called as BeforeDelegationCreated always returns nil
panic(fmt.Errorf("error while incrementing period: %w", err))
}
if err := app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr); err != nil {
// never called as AfterDelegationModified always returns nil
panic(fmt.Errorf("error while creating a new delegation period record: %w", err))
}
}
// reset context height
ctx = ctx.WithBlockHeight(height)
/* Handle staking state. */
// iterate through redelegations, reset creation height
err = app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) {
for i := range red.Entries {
red.Entries[i].CreationHeight = 0
}
err = app.StakingKeeper.SetRedelegation(ctx, red)
if err != nil {
panic(err)
}
return false
})
if err != nil {
panic(err)
}
// iterate through unbonding delegations, reset creation height
app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) {
for i := range ubd.Entries {
ubd.Entries[i].CreationHeight = 0
}
err = app.StakingKeeper.SetUnbondingDelegation(ctx, ubd)
if err != nil {
panic(err)
}
return false
})
// Iterate through validators by power descending, reset bond heights, and
// update bond intra-tx counters.
store := ctx.KVStore(app.GetKey(stakingtypes.StoreKey))
iter := storetypes.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey)
counter := int16(0)
for ; iter.Valid(); iter.Next() {
addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key()))
validator, err := app.StakingKeeper.GetValidator(ctx, addr)
if err != nil {
panic("expected validator, not found")
}
validator.UnbondingHeight = 0
if applyAllowedAddrs && !allowedAddrsMap[addr.String()] {
validator.Jailed = true
}
err = app.StakingKeeper.SetValidator(ctx, validator)
if err != nil {
panic(err)
}
counter++
}
if err := iter.Close(); err != nil {
app.Logger().Error("error while closing the key-value store reverse prefix iterator: ", err)
return
}
_, err = app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
if err != nil {
panic(err)
}
/* Handle slashing state. */
// reset start height on signing infos
app.SlashingKeeper.IterateValidatorSigningInfos(
ctx,
func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) {
info.StartHeight = 0
app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info)
return false
},
)
htlc.PrepForZeroHeightGenesis(ctx, app.HTLCKeeper)
random.PrepForZeroHeightGenesis(ctx, app.RandomKeeper)
oracle.PrepForZeroHeightGenesis(ctx, app.OracleKeeper)
service.PrepForZeroHeightGenesis(ctx, app.ServiceKeeper)
}
// ExportGenesis returns the KVStoreKey for the provided store key.
//
// NOTE: This is solely to be used for testing purposes.
func (app *IrisApp) ExportGenesis(ctx sdk.Context) (map[string]json.RawMessage, error) {
return app.mm.ExportGenesis(ctx, app.AppCodec())
}
================================================
FILE: app/keepers/keepers.go
================================================
package keepers
import (
"github.com/spf13/cast"
"cosmossdk.io/log"
"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
evidencekeeper "cosmossdk.io/x/evidence/keeper"
evidencetypes "cosmossdk.io/x/evidence/types"
"cosmossdk.io/x/feegrant"
feegrantkeeper "cosmossdk.io/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/runtime"
servertypes "github.com/cosmos/cosmos-sdk/server/types"
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
upgradekeeper "cosmossdk.io/x/upgrade/keeper"
upgradetypes "cosmossdk.io/x/upgrade/types"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
"github.com/cosmos/cosmos-sdk/x/params"
paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host"
icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
ibcclient "github.com/cosmos/ibc-go/v8/modules/core/02-client"
ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
srvflags "github.com/evmos/ethermint/server/flags"
ethermint "github.com/evmos/ethermint/types"
evmtypes "github.com/evmos/ethermint/x/evm/types"
"github.com/evmos/ethermint/x/evm/vm/geth"
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper"
"github.com/cosmos/ibc-go/v8/modules/apps/transfer"
ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper"
ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
nfttransfer "github.com/bianjieai/nft-transfer"
ibcnfttransferkeeper "github.com/bianjieai/nft-transfer/keeper"
ibcnfttransfertypes "github.com/bianjieai/nft-transfer/types"
tibcmttransfer "github.com/bianjieai/tibc-go/modules/tibc/apps/mt_transfer"
tibcmttransferkeeper "github.com/bianjieai/tibc-go/modules/tibc/apps/mt_transfer/keeper"
tibcmttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/mt_transfer/types"
tibcnfttransfer "github.com/bianjieai/tibc-go/modules/tibc/apps/nft_transfer"
tibcnfttransferkeeper "github.com/bianjieai/tibc-go/modules/tibc/apps/nft_transfer/keeper"
tibcnfttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/nft_transfer/types"
tibchost "github.com/bianjieai/tibc-go/modules/tibc/core/24-host"
tibcroutingtypes "github.com/bianjieai/tibc-go/modules/tibc/core/26-routing/types"
tibccli "github.com/bianjieai/tibc-go/modules/tibc/core/client/cli"
tibckeeper "github.com/bianjieai/tibc-go/modules/tibc/core/keeper"
coinswapkeeper "mods.irisnet.org/modules/coinswap/keeper"
coinswaptypes "mods.irisnet.org/modules/coinswap/types"
"mods.irisnet.org/modules/farm"
farmkeeper "mods.irisnet.org/modules/farm/keeper"
farmtypes "mods.irisnet.org/modules/farm/types"
htlckeeper "mods.irisnet.org/modules/htlc/keeper"
htlctypes "mods.irisnet.org/modules/htlc/types"
mtkeeper "mods.irisnet.org/modules/mt/keeper"
mttypes "mods.irisnet.org/modules/mt/types"
nftkeeper "mods.irisnet.org/modules/nft/keeper"
nfttypes "mods.irisnet.org/modules/nft/types"
oraclekeeper "mods.irisnet.org/modules/oracle/keeper"
oracletypes "mods.irisnet.org/modules/oracle/types"
randomkeeper "mods.irisnet.org/modules/random/keeper"
randomtypes "mods.irisnet.org/modules/random/types"
recordkeeper "mods.irisnet.org/modules/record/keeper"
recordtypes "mods.irisnet.org/modules/record/types"
servicekeeper "mods.irisnet.org/modules/service/keeper"
servicetypes "mods.irisnet.org/modules/service/types"
tokenkeeper "mods.irisnet.org/modules/token/keeper"
tokentypes "mods.irisnet.org/modules/token/types"
tokenv1 "mods.irisnet.org/modules/token/types/v1"
guardiankeeper "github.com/irisnet/irishub/v4/modules/guardian/keeper"
guardiantypes "github.com/irisnet/irishub/v4/modules/guardian/types"
"github.com/irisnet/irishub/v4/modules/internft"
mintkeeper "github.com/irisnet/irishub/v4/modules/mint/keeper"
minttypes "github.com/irisnet/irishub/v4/modules/mint/types"
iristypes "github.com/irisnet/irishub/v4/types"
"github.com/irisnet/irishub/v4/wrapper"
)
// AppKeepers defines a structure used to consolidate all
// the keepers needed to run an iris app.
type AppKeepers struct {
// keys to access the substores
keys map[string]*storetypes.KVStoreKey
tkeys map[string]*storetypes.TransientStoreKey
memKeys map[string]*storetypes.MemoryStoreKey
scopedIBCKeeper capabilitykeeper.ScopedKeeper
scopedTransferKeeper capabilitykeeper.ScopedKeeper
scopedIBCMockKeeper capabilitykeeper.ScopedKeeper
scopedNFTTransferKeeper capabilitykeeper.ScopedKeeper
scopedICAHostKeeper capabilitykeeper.ScopedKeeper
scopedTIBCKeeper capabilitykeeper.ScopedKeeper
scopedTIBCMockKeeper capabilitykeeper.ScopedKeeper
FeeGrantKeeper feegrantkeeper.Keeper
AccountKeeper authkeeper.AccountKeeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper *stakingkeeper.Keeper
SlashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper *govkeeper.Keeper
CrisisKeeper *crisiskeeper.Keeper
UpgradeKeeper *upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
EvidenceKeeper *evidencekeeper.Keeper
AuthzKeeper authzkeeper.Keeper
ConsensusParamsKeeper consensuskeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
IBCTransferKeeper ibctransferkeeper.Keeper
IBCNFTTransferKeeper ibcnfttransferkeeper.Keeper
ICAHostKeeper icahostkeeper.Keeper
GuardianKeeper guardiankeeper.Keeper
TokenKeeper tokenkeeper.Keeper
RecordKeeper recordkeeper.Keeper
NFTKeeper nftkeeper.Keeper
MTKeeper mtkeeper.Keeper
HTLCKeeper htlckeeper.Keeper
CoinswapKeeper coinswapkeeper.Keeper
ServiceKeeper servicekeeper.Keeper
OracleKeeper oraclekeeper.Keeper
RandomKeeper randomkeeper.Keeper
FarmKeeper farmkeeper.Keeper
TIBCKeeper *tibckeeper.Keeper
TIBCNFTTransferKeeper tibcnfttransferkeeper.Keeper
TIBCMTTransferKeeper tibcmttransferkeeper.Keeper
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper
TransferModule transfer.AppModule
ICAModule ica.AppModule
NftTransferModule tibcnfttransfer.AppModule
MtTransferModule tibcmttransfer.AppModule
IBCNftTransferModule nfttransfer.AppModule
}
// New initializes a new instance of AppKeepers.
//
// It takes in various parameters including appCodec, bApp, legacyAmino, maccPerms, modAccAddrs, blockedAddress, skipUpgradeHeights, homePath, invCheckPeriod, logger, and appOpts.
// It returns an instance of AppKeepers.
func New(
appCodec codec.Codec,
bApp *baseapp.BaseApp,
legacyAmino *codec.LegacyAmino,
maccPerms map[string][]string,
modAccAddrs map[string]bool,
blockedAddress map[string]bool,
skipUpgradeHeights map[int64]bool,
homePath string,
invCheckPeriod uint,
logger log.Logger,
appOpts servertypes.AppOptions,
) AppKeepers {
appKeepers := AppKeepers{}
// Set keys KVStoreKey, TransientStoreKey, MemoryStoreKey
appKeepers.genStoreKeys()
// configure state listening capabilities using AppOptions
// we are doing nothing with the returned streamingServices and waitGroup in this case
if err := bApp.RegisterStreamingServices(appOpts, appKeepers.keys); err != nil {
panic(err)
}
appKeepers.ParamsKeeper = initParamsKeeper(
appCodec,
legacyAmino,
appKeepers.keys[paramstypes.StoreKey],
appKeepers.tkeys[paramstypes.TStoreKey],
)
appKeepers.ConsensusParamsKeeper = consensuskeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[consensustypes.StoreKey]),
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
runtime.EventService{},
)
// set the BaseApp's parameter store
bApp.SetParamStore(&appKeepers.ConsensusParamsKeeper.ParamsStore)
// add capability keeper and ScopeToModule for ibc module
appKeepers.CapabilityKeeper = capabilitykeeper.NewKeeper(
appCodec,
appKeepers.keys[capabilitytypes.StoreKey],
appKeepers.memKeys[capabilitytypes.MemStoreKey],
)
appKeepers.scopedIBCKeeper = appKeepers.CapabilityKeeper.ScopeToModule(ibcexported.ModuleName)
appKeepers.scopedTransferKeeper = appKeepers.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName)
appKeepers.scopedNFTTransferKeeper = appKeepers.CapabilityKeeper.ScopeToModule(ibcnfttransfertypes.ModuleName)
appKeepers.scopedICAHostKeeper = appKeepers.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName)
appKeepers.AccountKeeper = authkeeper.NewAccountKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[authtypes.StoreKey]),
ethermint.ProtoAccount,
maccPerms,
authcodec.NewBech32Codec(iristypes.Bech32PrefixAccAddr),
iristypes.Bech32PrefixAccAddr,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.FeeGrantKeeper = feegrantkeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[feegrant.StoreKey]),
appKeepers.AccountKeeper,
)
appKeepers.BankKeeper = bankkeeper.NewBaseKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[banktypes.StoreKey]),
appKeepers.AccountKeeper,
blockedAddress,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
logger,
)
appKeepers.StakingKeeper = stakingkeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[stakingtypes.StoreKey]),
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
authcodec.NewBech32Codec(iristypes.Bech32PrefixValAddr),
authcodec.NewBech32Codec(iristypes.Bech32PrefixConsAddr),
)
appKeepers.MintKeeper = mintkeeper.NewKeeper(
appCodec,
appKeepers.keys[minttypes.StoreKey],
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.DistrKeeper = distrkeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[distrtypes.StoreKey]),
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
appKeepers.StakingKeeper,
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.SlashingKeeper = slashingkeeper.NewKeeper(
appCodec,
legacyAmino,
runtime.NewKVStoreService(appKeepers.keys[slashingtypes.StoreKey]),
appKeepers.StakingKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.CrisisKeeper = crisiskeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[crisistypes.StoreKey]),
invCheckPeriod,
appKeepers.BankKeeper,
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
authcodec.NewBech32Codec(iristypes.Bech32PrefixAccAddr),
)
// register the staking hooks
// NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks
appKeepers.StakingKeeper.SetHooks(
stakingtypes.NewMultiStakingHooks(
appKeepers.DistrKeeper.Hooks(),
appKeepers.SlashingKeeper.Hooks(),
),
)
// set the governance module account as the authority for conducting upgrades
// UpgradeKeeper must be created before IBCKeeper
appKeepers.UpgradeKeeper = upgradekeeper.NewKeeper(
skipUpgradeHeights,
runtime.NewKVStoreService(appKeepers.keys[upgradetypes.StoreKey]),
appCodec,
homePath,
bApp,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.AuthzKeeper = authzkeeper.NewKeeper(
runtime.NewKVStoreService(appKeepers.keys[authzkeeper.StoreKey]),
appCodec,
bApp.MsgServiceRouter(),
appKeepers.AccountKeeper,
)
appKeepers.scopedTIBCKeeper = appKeepers.CapabilityKeeper.ScopeToModule(tibchost.ModuleName)
// UpgradeKeeper must be created before IBCKeeper
appKeepers.IBCKeeper = ibckeeper.NewKeeper(
appCodec,
appKeepers.keys[ibcexported.StoreKey],
appKeepers.GetSubspace(ibcexported.ModuleName),
appKeepers.StakingKeeper,
appKeepers.UpgradeKeeper,
appKeepers.scopedIBCKeeper,
authtypes.NewModuleAddress(ibcexported.ModuleName).String(),
)
appKeepers.ICAHostKeeper = icahostkeeper.NewKeeper(
appCodec,
appKeepers.keys[icahosttypes.StoreKey],
appKeepers.GetSubspace(icahosttypes.SubModuleName),
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.PortKeeper,
appKeepers.AccountKeeper,
appKeepers.scopedICAHostKeeper,
bApp.MsgServiceRouter(),
authtypes.NewModuleAddress(icahosttypes.SubModuleName).String(),
)
appKeepers.ICAHostKeeper.WithQueryRouter(bApp.GRPCQueryRouter())
appKeepers.ICAModule = ica.NewAppModule(nil, &appKeepers.ICAHostKeeper)
icaHostIBCModule := icahost.NewIBCModule(appKeepers.ICAHostKeeper)
// register the proposal types
appKeepers.TIBCKeeper = tibckeeper.NewKeeper(
appCodec,
appKeepers.keys[tibchost.StoreKey],
appKeepers.StakingKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.NFTKeeper = nftkeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[nfttypes.StoreKey]),
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
)
appKeepers.TIBCNFTTransferKeeper = tibcnfttransferkeeper.NewKeeper(
appCodec,
appKeepers.keys[tibcnfttypes.StoreKey],
appKeepers.AccountKeeper,
nftkeeper.NewLegacyKeeper(appKeepers.NFTKeeper),
appKeepers.TIBCKeeper.PacketKeeper,
appKeepers.TIBCKeeper.ClientKeeper,
)
appKeepers.MTKeeper = mtkeeper.NewKeeper(
appCodec, appKeepers.keys[mttypes.StoreKey],
)
appKeepers.TIBCMTTransferKeeper = tibcmttransferkeeper.NewKeeper(
appCodec,
appKeepers.keys[tibcnfttypes.StoreKey],
appKeepers.AccountKeeper, appKeepers.MTKeeper,
appKeepers.TIBCKeeper.PacketKeeper,
appKeepers.TIBCKeeper.ClientKeeper,
)
appKeepers.IBCTransferKeeper = ibctransferkeeper.NewKeeper(
appCodec,
appKeepers.keys[ibctransfertypes.StoreKey],
appKeepers.GetSubspace(ibctransfertypes.ModuleName),
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.PortKeeper,
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
appKeepers.scopedTransferKeeper,
authtypes.NewModuleAddress(ibctransfertypes.ModuleName).String(),
)
appKeepers.TransferModule = transfer.NewAppModule(appKeepers.IBCTransferKeeper)
transferIBCModule := transfer.NewIBCModule(appKeepers.IBCTransferKeeper)
appKeepers.IBCNFTTransferKeeper = ibcnfttransferkeeper.NewKeeper(
appCodec,
appKeepers.keys[ibcnfttransfertypes.StoreKey],
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.ChannelKeeper,
appKeepers.IBCKeeper.PortKeeper,
appKeepers.AccountKeeper,
internft.NewInterNftKeeper(appCodec, appKeepers.NFTKeeper, appKeepers.AccountKeeper),
appKeepers.scopedNFTTransferKeeper,
)
appKeepers.IBCNftTransferModule = nfttransfer.NewAppModule(appKeepers.IBCNFTTransferKeeper)
nfttransferIBCModule := nfttransfer.NewIBCModule(appKeepers.IBCNFTTransferKeeper)
// routerModule := router.NewAppModule(app.RouterKeeper, transferIBCModule)
// create static IBC router, add transfer route, then set and seal it
ibcRouter := porttypes.NewRouter().
AddRoute(ibctransfertypes.ModuleName, transferIBCModule).
AddRoute(ibcnfttransfertypes.ModuleName, nfttransferIBCModule).
AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
appKeepers.IBCKeeper.SetRouter(ibcRouter)
appKeepers.NftTransferModule = tibcnfttransfer.NewAppModule(appKeepers.TIBCNFTTransferKeeper)
appKeepers.MtTransferModule = tibcmttransfer.NewAppModule(appKeepers.TIBCMTTransferKeeper)
tibcRouter := tibcroutingtypes.NewRouter()
tibcRouter.AddRoute(tibcnfttypes.ModuleName, appKeepers.NftTransferModule).
AddRoute(tibcmttypes.ModuleName, appKeepers.MtTransferModule)
appKeepers.TIBCKeeper.SetRouter(tibcRouter)
// create evidence keeper with router
appKeepers.EvidenceKeeper = evidencekeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[evidencetypes.StoreKey]),
appKeepers.StakingKeeper,
appKeepers.SlashingKeeper,
authcodec.NewBech32Codec(iristypes.Bech32PrefixAccAddr),
runtime.ProvideCometInfoService(),
)
appKeepers.GuardianKeeper = guardiankeeper.NewKeeper(
appCodec,
appKeepers.keys[guardiantypes.StoreKey],
)
appKeepers.RecordKeeper = recordkeeper.NewKeeper(
appCodec,
appKeepers.keys[recordtypes.StoreKey],
)
appKeepers.HTLCKeeper = htlckeeper.NewKeeper(
appCodec, appKeepers.keys[htlctypes.StoreKey],
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.CoinswapKeeper = coinswapkeeper.NewKeeper(
appCodec,
appKeepers.keys[coinswaptypes.StoreKey],
appKeepers.BankKeeper,
appKeepers.AccountKeeper,
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.ServiceKeeper = servicekeeper.NewKeeper(
appCodec,
appKeepers.keys[servicetypes.StoreKey],
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
servicetypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.OracleKeeper = oraclekeeper.NewKeeper(
appCodec,
appKeepers.keys[oracletypes.StoreKey],
appKeepers.ServiceKeeper,
)
appKeepers.RandomKeeper = randomkeeper.NewKeeper(
appCodec,
appKeepers.keys[randomtypes.StoreKey],
appKeepers.BankKeeper,
appKeepers.ServiceKeeper,
)
govConfig := govtypes.Config{MaxMetadataLen: 10000}
appKeepers.GovKeeper = govkeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(appKeepers.keys[govtypes.StoreKey]),
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
appKeepers.StakingKeeper,
appKeepers.DistrKeeper,
bApp.MsgServiceRouter(),
govConfig,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
appKeepers.FarmKeeper = farmkeeper.NewKeeper(appCodec,
appKeepers.keys[farmtypes.StoreKey],
appKeepers.BankKeeper,
appKeepers.AccountKeeper,
NewDistrKeeperAdapter(appKeepers.DistrKeeper),
NewGovKeeperAdapter(appKeepers.GovKeeper),
appKeepers.CoinswapKeeper,
authtypes.FeeCollectorName,
distrtypes.ModuleName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
// register the proposal types
govRouter := govv1beta1.NewRouter()
govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(appKeepers.ParamsKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(appKeepers.IBCKeeper.ClientKeeper)).
AddRoute(tibchost.RouterKey, tibccli.NewProposalHandler(appKeepers.TIBCKeeper)).
AddRoute(farmtypes.RouterKey, farm.NewProposalHandler(appKeepers.FarmKeeper))
appKeepers.GovKeeper.SetHooks(govtypes.NewMultiGovHooks(
wrapper.NewFarmGovHook(farmkeeper.NewGovHook(appKeepers.FarmKeeper)),
))
appKeepers.GovKeeper.SetLegacyRouter(govRouter)
// Create Ethermint keepers
appKeepers.FeeMarketKeeper = feemarketkeeper.NewKeeper(
appCodec,
authtypes.NewModuleAddress(govtypes.ModuleName),
appKeepers.keys[feemarkettypes.StoreKey],
appKeepers.tkeys[feemarkettypes.TransientKey],
appKeepers.GetSubspace(feemarkettypes.ModuleName),
)
appKeepers.EvmKeeper = evmkeeper.NewKeeper(
appCodec,
appKeepers.keys[evmtypes.StoreKey],
appKeepers.tkeys[evmtypes.TransientKey],
authtypes.NewModuleAddress(govtypes.ModuleName),
appKeepers.AccountKeeper,
appKeepers.BankKeeper,
appKeepers.StakingKeeper,
appKeepers.FeeMarketKeeper,
nil,
geth.NewEVM,
cast.ToString(appOpts.Get(srvflags.EVMTracer)),
appKeepers.GetSubspace(evmtypes.ModuleName),
)
appKeepers.TokenKeeper = tokenkeeper.NewKeeper(
appCodec,
appKeepers.keys[tokentypes.StoreKey],
appKeepers.BankKeeper,
appKeepers.AccountKeeper,
wrapper.NewEVMKeeper(appKeepers.EvmKeeper),
wrapper.NewICS20Keeper(appKeepers.IBCTransferKeeper),
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
).WithSwapRegistry(tokenv1.SwapRegistry{
iristypes.NativeToken.MinUnit: tokenv1.SwapParams{
MinUnit: iristypes.EvmToken.MinUnit,
Ratio: math.LegacyOneDec(),
},
iristypes.EvmToken.MinUnit: tokenv1.SwapParams{
MinUnit: iristypes.NativeToken.MinUnit,
Ratio: math.LegacyOneDec(),
},
})
appKeepers.EvmKeeper = appKeepers.EvmKeeper.SetHooks(appKeepers.TokenKeeper.Hooks())
return appKeepers
}
// initParamsKeeper init params keeper and its subspaces
func initParamsKeeper(
appCodec codec.BinaryCodec,
legacyAmino *codec.LegacyAmino,
key, tkey storetypes.StoreKey,
) paramskeeper.Keeper {
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
// register the key tables for legacy param subspaces
keyTable := ibcclienttypes.ParamKeyTable()
keyTable.RegisterParamSet(&ibcconnectiontypes.Params{})
paramsKeeper.Subspace(authtypes.ModuleName).WithKeyTable(authtypes.ParamKeyTable())
paramsKeeper.Subspace(banktypes.ModuleName).WithKeyTable(banktypes.ParamKeyTable())
paramsKeeper.Subspace(stakingtypes.ModuleName).WithKeyTable(stakingtypes.ParamKeyTable())
paramsKeeper.Subspace(minttypes.ModuleName).WithKeyTable(minttypes.ParamKeyTable())
paramsKeeper.Subspace(distrtypes.ModuleName).WithKeyTable(distrtypes.ParamKeyTable())
paramsKeeper.Subspace(slashingtypes.ModuleName).WithKeyTable(slashingtypes.ParamKeyTable())
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable())
paramsKeeper.Subspace(crisistypes.ModuleName).WithKeyTable(crisistypes.ParamKeyTable())
paramsKeeper.Subspace(tokentypes.ModuleName).WithKeyTable(tokenv1.ParamKeyTable())
paramsKeeper.Subspace(recordtypes.ModuleName)
paramsKeeper.Subspace(htlctypes.ModuleName).WithKeyTable(htlctypes.ParamKeyTable())
paramsKeeper.Subspace(coinswaptypes.ModuleName).WithKeyTable(coinswaptypes.ParamKeyTable())
paramsKeeper.Subspace(servicetypes.ModuleName).WithKeyTable(servicetypes.ParamKeyTable())
paramsKeeper.Subspace(farmtypes.ModuleName).WithKeyTable(farmtypes.ParamKeyTable())
paramsKeeper.Subspace(tibchost.ModuleName)
paramsKeeper.Subspace(ibcexported.ModuleName).WithKeyTable(keyTable)
paramsKeeper.Subspace(ibctransfertypes.ModuleName).WithKeyTable(ibctransfertypes.ParamKeyTable())
paramsKeeper.Subspace(icahosttypes.SubModuleName).WithKeyTable(icahosttypes.ParamKeyTable())
// ethermint subspaces
paramsKeeper.Subspace(evmtypes.ModuleName).WithKeyTable(evmtypes.ParamKeyTable())
paramsKeeper.Subspace(feemarkettypes.ModuleName).WithKeyTable(feemarkettypes.ParamKeyTable())
return paramsKeeper
}
================================================
FILE: app/keepers/keys.go
================================================
package keepers
import (
storetypes "cosmossdk.io/store/types"
evidencetypes "cosmossdk.io/x/evidence/types"
"cosmossdk.io/x/feegrant"
upgradetypes "cosmossdk.io/x/upgrade/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types"
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
evmtypes "github.com/evmos/ethermint/x/evm/types"
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
coinswaptypes "mods.irisnet.org/modules/coinswap/types"
farmtypes "mods.irisnet.org/modules/farm/types"
htlctypes "mods.irisnet.org/modules/htlc/types"
mttypes "mods.irisnet.org/modules/mt/types"
nfttypes "mods.irisnet.org/modules/nft/types"
oracletypes "mods.irisnet.org/modules/oracle/types"
randomtypes "mods.irisnet.org/modules/random/types"
recordtypes "mods.irisnet.org/modules/record/types"
servicetypes "mods.irisnet.org/modules/service/types"
tokentypes "mods.irisnet.org/modules/token/types"
ibcnfttransfertypes "github.com/bianjieai/nft-transfer/types"
tibcmttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/mt_transfer/types"
tibcnfttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/nft_transfer/types"
tibchost "github.com/bianjieai/tibc-go/modules/tibc/core/24-host"
guardiantypes "github.com/irisnet/irishub/v4/modules/guardian/types"
minttypes "github.com/irisnet/irishub/v4/modules/mint/types"
)
func (appKeepers *AppKeepers) genStoreKeys() {
// Define what keys will be used in the cosmos-sdk key/value store.
// Cosmos-SDK modules each have a "key" that allows the application to reference what they've stored on the chain.
appKeepers.keys = storetypes.NewKVStoreKeys(
authtypes.StoreKey,
banktypes.StoreKey,
stakingtypes.StoreKey,
minttypes.StoreKey,
distrtypes.StoreKey,
slashingtypes.StoreKey,
crisistypes.StoreKey,
govtypes.StoreKey,
paramstypes.StoreKey,
ibcexported.StoreKey,
upgradetypes.StoreKey,
consensustypes.StoreKey,
evidencetypes.StoreKey,
ibctransfertypes.StoreKey,
ibcnfttransfertypes.StoreKey,
icahosttypes.StoreKey,
capabilitytypes.StoreKey,
guardiantypes.StoreKey,
tokentypes.StoreKey,
nfttypes.StoreKey,
htlctypes.StoreKey,
recordtypes.StoreKey,
coinswaptypes.StoreKey,
servicetypes.StoreKey,
oracletypes.StoreKey,
randomtypes.StoreKey,
farmtypes.StoreKey,
feegrant.StoreKey,
tibchost.StoreKey,
tibcnfttypes.StoreKey,
tibcmttypes.StoreKey,
mttypes.StoreKey,
authzkeeper.StoreKey,
// ethermint keys
evmtypes.StoreKey,
feemarkettypes.StoreKey,
)
// Define transient store keys
appKeepers.tkeys = storetypes.NewTransientStoreKeys(
paramstypes.TStoreKey,
evmtypes.TransientKey,
feemarkettypes.TransientKey,
)
// MemKeys are for information that is stored only in RAM.
appKeepers.memKeys = storetypes.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
}
// KvStoreKeys returns the map of string to KVStoreKey.
//
// None.
// map[string]*storetypes.KVStoreKey.
func (appKeepers *AppKeepers) KvStoreKeys() map[string]*storetypes.KVStoreKey {
return appKeepers.keys
}
// TransientStoreKeys returns the map of transient store keys.
//
// No parameters.
// Returns a map[string]*storetypes.TransientStoreKey.
func (appKeepers *AppKeepers) TransientStoreKeys() map[string]*storetypes.TransientStoreKey {
return appKeepers.tkeys
}
// MemoryStoreKeys returns the map of type map[string]*storetypes.MemoryStoreKey.
//
// No parameters.
// Returns a map of type map[string]*storetypes.MemoryStoreKey.
func (appKeepers *AppKeepers) MemoryStoreKeys() map[string]*storetypes.MemoryStoreKey {
return appKeepers.memKeys
}
// GetKey returns the KVStoreKey for the provided store key.
//
// NOTE: This is solely to be used for testing purposes.
func (appKeepers *AppKeepers) GetKey(storeKey string) *storetypes.KVStoreKey {
return appKeepers.keys[storeKey]
}
// GetTKey returns the TransientStoreKey for the provided store key.
//
// NOTE: This is solely to be used for testing purposes.
func (appKeepers *AppKeepers) GetTKey(storeKey string) *storetypes.TransientStoreKey {
return appKeepers.tkeys[storeKey]
}
// GetMemKey returns the MemStoreKey for the provided mem key.
//
// NOTE: This is solely used for testing purposes.
func (appKeepers *AppKeepers) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {
return appKeepers.memKeys[storeKey]
}
// GetSubspace returns a param subspace for a given module name.
//
// NOTE: This is solely to be used for testing purposes.
func (appKeepers *AppKeepers) GetSubspace(moduleName string) paramstypes.Subspace {
subspace, _ := appKeepers.ParamsKeeper.GetSubspace(moduleName)
return subspace
}
================================================
FILE: app/keepers/types.go
================================================
package keepers
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
)
type DistrKeeperAdapter struct {
keeper distrkeeper.Keeper
}
func NewDistrKeeperAdapter(keeper distrkeeper.Keeper) DistrKeeperAdapter {
return DistrKeeperAdapter{keeper: keeper}
}
func (a DistrKeeperAdapter) GetFeePool(ctx context.Context) (distrtypes.FeePool, error) {
return a.keeper.FeePool.Get(ctx)
}
func (a DistrKeeperAdapter) SetFeePool(ctx context.Context, feePool distrtypes.FeePool) error {
return a.keeper.FeePool.Set(ctx, feePool)
}
type GovKeeperAdapter struct {
keeper *govkeeper.Keeper
}
func NewGovKeeperAdapter(keeper *govkeeper.Keeper) GovKeeperAdapter {
return GovKeeperAdapter{keeper: keeper}
}
func (a GovKeeperAdapter) SubmitProposal(ctx context.Context, messages []sdk.Msg, metadata, title, summary string, proposer sdk.AccAddress, expedited bool) (v1.Proposal, error) {
return a.keeper.SubmitProposal(ctx, messages, metadata, title, summary, proposer, expedited)
}
func (a GovKeeperAdapter) AddDeposit(ctx context.Context, proposalID uint64, depositorAddr sdk.AccAddress, depositAmount sdk.Coins) (bool, error) {
return a.keeper.AddDeposit(ctx, proposalID, depositorAddr, depositAmount)
}
func (a GovKeeperAdapter) GetProposal(ctx context.Context, proposalID uint64) (v1.Proposal, error) {
return a.keeper.Proposals.Get(ctx, proposalID)
}
func (a GovKeeperAdapter) GetGovernanceAccount(ctx context.Context) sdk.ModuleAccountI {
return a.keeper.GetGovernanceAccount(ctx)
}
================================================
FILE: app/modules.go
================================================
package app
import (
"cosmossdk.io/x/evidence"
evidencetypes "cosmossdk.io/x/evidence/types"
"cosmossdk.io/x/feegrant"
feegrantmodule "cosmossdk.io/x/feegrant/module"
"cosmossdk.io/x/upgrade"
upgradetypes "cosmossdk.io/x/upgrade/types"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/x/auth"
authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
"github.com/cosmos/cosmos-sdk/x/authz"
authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module"
"github.com/cosmos/cosmos-sdk/x/bank"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/cosmos/cosmos-sdk/x/consensus"
consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
"github.com/cosmos/cosmos-sdk/x/crisis"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
distr "github.com/cosmos/cosmos-sdk/x/distribution"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
"github.com/cosmos/cosmos-sdk/x/genutil"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/cosmos/cosmos-sdk/x/gov"
govclient "github.com/cosmos/cosmos-sdk/x/gov/client"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/cosmos/cosmos-sdk/x/params"
paramsclient "github.com/cosmos/cosmos-sdk/x/params/client"
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/cosmos/cosmos-sdk/x/slashing"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
"github.com/cosmos/cosmos-sdk/x/staking"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/cosmos/ibc-go/modules/capability"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
iristypes "github.com/irisnet/irishub/v4/types"
icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types"
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
ibc "github.com/cosmos/ibc-go/v8/modules/core"
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint"
"mods.irisnet.org/modules/coinswap"
coinswaptypes "mods.irisnet.org/modules/coinswap/types"
"mods.irisnet.org/modules/farm"
farmtypes "mods.irisnet.org/modules/farm/types"
"mods.irisnet.org/modules/htlc"
htlctypes "mods.irisnet.org/modules/htlc/types"
"mods.irisnet.org/modules/mt"
mttypes "mods.irisnet.org/modules/mt/types"
"mods.irisnet.org/modules/nft"
nfttypes "mods.irisnet.org/modules/nft/types"
"mods.irisnet.org/modules/oracle"
oracletypes "mods.irisnet.org/modules/oracle/types"
"mods.irisnet.org/modules/random"
randomtypes "mods.irisnet.org/modules/random/types"
"mods.irisnet.org/modules/record"
recordtypes "mods.irisnet.org/modules/record/types"
"mods.irisnet.org/modules/service"
servicetypes "mods.irisnet.org/modules/service/types"
"mods.irisnet.org/modules/token"
tokentypes "mods.irisnet.org/modules/token/types"
tibcmttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/mt_transfer/types"
tibcnfttypes "github.com/bianjieai/tibc-go/modules/tibc/apps/nft_transfer/types"
tibc "github.com/bianjieai/tibc-go/modules/tibc/core"
tibchost "github.com/bianjieai/tibc-go/modules/tibc/core/24-host"
tibccli "github.com/bianjieai/tibc-go/modules/tibc/core/client/cli"
evmtypes "github.com/evmos/ethermint/x/evm/types"
"github.com/evmos/ethermint/x/feemarket"
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
ibcnfttransfertypes "github.com/bianjieai/nft-transfer/types"
irisappparams "github.com/irisnet/irishub/v4/app/params"
irisevm "github.com/irisnet/irishub/v4/modules/evm"
"github.com/irisnet/irishub/v4/modules/guardian"
guardiantypes "github.com/irisnet/irishub/v4/modules/guardian/types"
"github.com/irisnet/irishub/v4/modules/mint"
minttypes "github.com/irisnet/irishub/v4/modules/mint/types"
)
var (
legacyProposalHandlers = []govclient.ProposalHandler{
paramsclient.ProposalHandler,
}
// module account permissions
maccPerms = map[string][]string{
authtypes.FeeCollectorName: {authtypes.Burner},
distrtypes.ModuleName: nil,
minttypes.ModuleName: {authtypes.Minter},
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
govtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
tokentypes.ModuleName: {authtypes.Minter, authtypes.Burner},
htlctypes.ModuleName: {authtypes.Minter, authtypes.Burner},
coinswaptypes.ModuleName: {authtypes.Minter, authtypes.Burner},
servicetypes.DepositAccName: {authtypes.Burner},
servicetypes.RequestAccName: nil,
servicetypes.FeeCollectorName: {authtypes.Burner},
farmtypes.ModuleName: {authtypes.Burner},
farmtypes.RewardCollector: nil,
farmtypes.EscrowCollector: nil,
tibcnfttypes.ModuleName: nil,
tibcmttypes.ModuleName: nil,
nfttypes.ModuleName: nil,
icatypes.ModuleName: nil,
evmtypes.ModuleName: {
authtypes.Minter,
authtypes.Burner,
}, // used for secure addition and subtraction of balance using module account
}
)
// ModuleBasics defines the module BasicManager that is in charge of setting up basic,
// non-dependant module elements, such as codec registration
// and genesis verification.
func newBasicManagerFromManager(app *IrisApp) module.BasicManager {
basicManager := module.NewBasicManagerFromManager(
app.mm,
map[string]module.AppModuleBasic{
genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),
govtypes.ModuleName: gov.NewAppModuleBasic(append(legacyProposalHandlers, tibccli.GovHandlers...)),
})
basicManager.RegisterLegacyAminoCodec(app.legacyAmino)
basicManager.RegisterInterfaces(app.interfaceRegistry)
return basicManager
}
func appModules(
app *IrisApp,
encodingConfig irisappparams.EncodingConfig,
skipGenesisInvariants bool,
) []module.AppModule {
appCodec := encodingConfig.Codec
return []module.AppModule{
genutil.NewAppModule(
app.AccountKeeper, app.StakingKeeper, app.BaseApp,
encodingConfig.TxConfig,
),
auth.NewAppModule(
appCodec,
app.AccountKeeper,
authsims.RandomGenesisAccounts,
app.GetSubspace(authtypes.ModuleName),
),
vesting.NewAppModule(app.AccountKeeper, app.BankKeeper),
bank.NewAppModule(
appCodec,
app.BankKeeper,
app.AccountKeeper,
app.GetSubspace(banktypes.ModuleName),
),
capability.NewAppModule(appCodec, *app.CapabilityKeeper, false),
crisis.NewAppModule(
app.CrisisKeeper,
skipGenesisInvariants,
app.GetSubspace(crisistypes.ModuleName),
),
gov.NewAppModule(
appCodec,
app.GovKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(govtypes.ModuleName),
),
mint.NewAppModule(
appCodec,
app.MintKeeper,
app.GetSubspace(minttypes.ModuleName),
),
slashing.NewAppModule(
appCodec,
app.SlashingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.StakingKeeper,
app.GetSubspace(slashingtypes.ModuleName),
app.interfaceRegistry,
),
distr.NewAppModule(
appCodec,
app.DistrKeeper,
app.AccountKeeper,
app.BankKeeper,
app.StakingKeeper,
app.GetSubspace(distrtypes.ModuleName),
),
staking.NewAppModule(
appCodec,
app.StakingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(stakingtypes.ModuleName),
),
upgrade.NewAppModule(app.UpgradeKeeper, addresscodec.NewBech32Codec(iristypes.Bech32PrefixAccAddr)),
evidence.NewAppModule(*app.EvidenceKeeper),
feegrantmodule.NewAppModule(
appCodec,
app.AccountKeeper,
app.BankKeeper,
app.FeeGrantKeeper,
app.interfaceRegistry,
),
authzmodule.NewAppModule(
appCodec,
app.AuthzKeeper,
app.AccountKeeper,
app.BankKeeper,
app.interfaceRegistry,
),
consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper),
ibc.NewAppModule(app.IBCKeeper),
ibctm.NewAppModule(),
tibc.NewAppModule(app.TIBCKeeper),
params.NewAppModule(app.ParamsKeeper),
app.TransferModule,
app.IBCNftTransferModule,
app.ICAModule,
app.NftTransferModule,
app.MtTransferModule,
guardian.NewAppModule(appCodec, app.GuardianKeeper),
token.NewAppModule(
appCodec,
app.TokenKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(tokentypes.ModuleName),
),
record.NewAppModule(appCodec, app.RecordKeeper, app.AccountKeeper, app.BankKeeper),
nft.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper),
mt.NewAppModule(appCodec, app.MTKeeper, app.AccountKeeper, app.BankKeeper),
htlc.NewAppModule(
appCodec,
app.HTLCKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(htlctypes.ModuleName),
),
coinswap.NewAppModule(
appCodec,
app.CoinswapKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(coinswaptypes.ModuleName),
),
service.NewAppModule(
appCodec,
app.ServiceKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(servicetypes.ModuleName),
),
oracle.NewAppModule(appCodec, app.OracleKeeper, app.AccountKeeper, app.BankKeeper),
random.NewAppModule(appCodec, app.RandomKeeper, app.AccountKeeper, app.BankKeeper),
farm.NewAppModule(
appCodec,
app.FarmKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(farmtypes.ModuleName),
),
// Ethermint app modules
irisevm.NewAppModule(
app.EvmKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(evmtypes.ModuleName),
),
feemarket.NewAppModule(app.FeeMarketKeeper, app.GetSubspace(feemarkettypes.ModuleName)),
}
}
// simulationModules returns modules for simulation manager
// define the order of the modules for deterministic simulations
func simulationModules(
app *IrisApp,
encodingConfig irisappparams.EncodingConfig,
_ bool,
) []module.AppModuleSimulation {
appCodec := encodingConfig.Codec
return []module.AppModuleSimulation{
auth.NewAppModule(
appCodec,
app.AccountKeeper,
authsims.RandomGenesisAccounts,
app.GetSubspace(authtypes.ModuleName),
),
bank.NewAppModule(
appCodec,
app.BankKeeper,
app.AccountKeeper,
app.GetSubspace(banktypes.ModuleName),
),
capability.NewAppModule(appCodec, *app.CapabilityKeeper, false),
gov.NewAppModule(
appCodec,
app.GovKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(govtypes.ModuleName),
),
mint.NewAppModule(appCodec, app.MintKeeper, app.GetSubspace(minttypes.ModuleName)),
feegrantmodule.NewAppModule(
appCodec,
app.AccountKeeper,
app.BankKeeper,
app.FeeGrantKeeper,
app.interfaceRegistry,
),
staking.NewAppModule(
appCodec,
app.StakingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(stakingtypes.ModuleName),
),
distr.NewAppModule(
appCodec,
app.DistrKeeper,
app.AccountKeeper,
app.BankKeeper,
app.StakingKeeper,
app.GetSubspace(distrtypes.ModuleName),
),
slashing.NewAppModule(
appCodec,
app.SlashingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.StakingKeeper,
app.GetSubspace(slashingtypes.ModuleName),
app.interfaceRegistry,
),
params.NewAppModule(app.ParamsKeeper),
evidence.NewAppModule(*app.EvidenceKeeper),
authzmodule.NewAppModule(
appCodec,
app.AuthzKeeper,
app.AccountKeeper,
app.BankKeeper,
app.interfaceRegistry,
),
ibc.NewAppModule(app.IBCKeeper),
app.TransferModule,
app.IBCNftTransferModule,
guardian.NewAppModule(appCodec, app.GuardianKeeper),
token.NewAppModule(
appCodec,
app.TokenKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(tokentypes.ModuleName),
),
record.NewAppModule(appCodec, app.RecordKeeper, app.AccountKeeper, app.BankKeeper),
nft.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper),
htlc.NewAppModule(
appCodec,
app.HTLCKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(htlctypes.ModuleName),
),
coinswap.NewAppModule(
appCodec,
app.CoinswapKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(coinswaptypes.ModuleName),
),
service.NewAppModule(
appCodec,
app.ServiceKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(servicetypes.ModuleName),
),
oracle.NewAppModule(appCodec, app.OracleKeeper, app.AccountKeeper, app.BankKeeper),
random.NewAppModule(appCodec, app.RandomKeeper, app.AccountKeeper, app.BankKeeper),
farm.NewAppModule(
appCodec,
app.FarmKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(farmtypes.ModuleName),
),
tibc.NewAppModule(app.TIBCKeeper),
// Ethermint app modules
irisevm.NewAppModule(
app.EvmKeeper,
app.AccountKeeper,
app.BankKeeper,
app.GetSubspace(evmtypes.ModuleName),
),
feemarket.NewAppModule(app.FeeMarketKeeper, app.GetSubspace(feemarkettypes.ModuleName)),
}
}
/*
orderBeginBlockers tells the app's module manager how to set the order of
BeginBlockers, which are run at the beginning of every block.
Interchain Security Requirements:
During begin block slashing happens after distr.BeginBlocker so that
there is nothing left over in the validator fee pool, so as to keep the
CanWithdrawInvariant invariant.
NOTE: staking module is required if HistoricalEntries param > 0
NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)
*/
func orderBeginBlockers() []string {
return []string{
capabilitytypes.ModuleName,
minttypes.ModuleName,
feemarkettypes.ModuleName,
evmtypes.ModuleName,
distrtypes.ModuleName,
slashingtypes.ModuleName,
evidencetypes.ModuleName,
stakingtypes.ModuleName,
authtypes.ModuleName,
banktypes.ModuleName,
govtypes.ModuleName,
crisistypes.ModuleName,
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
genutiltypes.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
paramstypes.ModuleName,
vestingtypes.ModuleName,
icatypes.ModuleName,
consensustypes.ModuleName,
// self module
tokentypes.ModuleName,
tibchost.ModuleName,
nfttypes.ModuleName,
htlctypes.ModuleName,
recordtypes.ModuleName,
coinswaptypes.ModuleName,
servicetypes.ModuleName,
oracletypes.ModuleName,
randomtypes.ModuleName,
farmtypes.ModuleName,
mttypes.ModuleName,
tibcnfttypes.ModuleName,
tibcmttypes.ModuleName,
guardiantypes.ModuleName,
ibcnfttransfertypes.ModuleName,
}
}
/*
Interchain Security Requirements:
- provider.EndBlock gets validator updates from the staking module;
thus, staking.EndBlock must be executed before provider.EndBlock;
- creating a new consumer chain requires the following order,
CreateChildClient(), staking.EndBlock, provider.EndBlock;
thus, gov.EndBlock must be executed before staking.EndBlock
*/
func orderEndBlockers() []string {
return []string{
crisistypes.ModuleName,
govtypes.ModuleName,
stakingtypes.ModuleName,
evmtypes.ModuleName,
feemarkettypes.ModuleName,
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
capabilitytypes.ModuleName,
authtypes.ModuleName,
banktypes.ModuleName,
distrtypes.ModuleName,
slashingtypes.ModuleName,
minttypes.ModuleName,
genutiltypes.ModuleName,
evidencetypes.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
icatypes.ModuleName,
consensustypes.ModuleName,
// self module
tokentypes.ModuleName,
tibchost.ModuleName,
nfttypes.ModuleName,
htlctypes.ModuleName,
recordtypes.ModuleName,
coinswaptypes.ModuleName,
servicetypes.ModuleName,
oracletypes.ModuleName,
randomtypes.ModuleName,
farmtypes.ModuleName,
mttypes.ModuleName,
tibcnfttypes.ModuleName,
tibcmttypes.ModuleName,
guardiantypes.ModuleName,
ibcnfttransfertypes.ModuleName,
}
}
/*
NOTE: The genutils module must occur after staking so that pools are
properly initialized with tokens from genesis accounts.
NOTE: The genutils module must also occur after auth so that it can access the params from auth.
NOTE: Capability module must occur first so that it can initialize any capabilities
so that other modules that want to create or claim capabilities afterwards in InitChain
can do so safely.
*/
func orderInitBlockers() []string {
return []string{
capabilitytypes.ModuleName,
authtypes.ModuleName,
banktypes.ModuleName,
distrtypes.ModuleName,
govtypes.ModuleName,
stakingtypes.ModuleName,
slashingtypes.ModuleName,
minttypes.ModuleName,
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
evmtypes.ModuleName,
// NOTE: feemarket module needs to be initialized before genutil module:
// gentx transactions use MinGasPriceDecorator.AnteHandle
feemarkettypes.ModuleName,
genutiltypes.ModuleName,
evidencetypes.ModuleName,
icatypes.ModuleName,
consensustypes.ModuleName,
// self module
tokentypes.ModuleName,
tibchost.ModuleName,
nfttypes.ModuleName,
htlctypes.ModuleName,
recordtypes.ModuleName,
// NOTE: coinswap module needs to be initialized before farm module:
coinswaptypes.ModuleName,
farmtypes.ModuleName,
randomtypes.ModuleName,
servicetypes.ModuleName,
oracletypes.ModuleName,
mttypes.ModuleName,
tibcnfttypes.ModuleName,
tibcmttypes.ModuleName,
guardiantypes.ModuleName,
// NOTE: crisis module must go at the end to check for invariants on each module
crisistypes.ModuleName,
ibcnfttransfertypes.ModuleName,
}
}
================================================
FILE: app/params/encoding.go
================================================
package params
import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/types"
)
// EncodingConfig specifies the concrete encoding types to use for a given app.
// This is provided for compatibility between protobuf and amino implementations.
type EncodingConfig struct {
InterfaceRegistry types.InterfaceRegistry
Codec codec.Codec
TxConfig client.TxConfig
LegacyAmino *codec.LegacyAmino
}
================================================
FILE: app/params/params.go
================================================
package params
// Simulation parameter constants
const (
SimulationTest = "simulation_test"
)
================================================
FILE: app/params/proto.go
================================================
package params
import (
"cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
"github.com/cosmos/gogoproto/proto"
"google.golang.org/protobuf/reflect/protoreflect"
enccodec "github.com/evmos/ethermint/encoding/codec"
evmtypes "github.com/evmos/ethermint/x/evm/types"
)
// MakeEncodingConfig creates an EncodingConfig for an amino based test configuration.
func MakeEncodingConfig() EncodingConfig {
amino := codec.NewLegacyAmino()
signingOptions := signing.Options{
AddressCodec: address.Bech32Codec{
Bech32Prefix: sdk.GetConfig().GetBech32AccountAddrPrefix(),
},
ValidatorAddressCodec: address.Bech32Codec{
Bech32Prefix: sdk.GetConfig().GetBech32ValidatorAddrPrefix(),
},
CustomGetSigners: map[protoreflect.FullName]signing.GetSignersFunc{
evmtypes.MsgEthereumTxCustomGetSigner.MsgType: evmtypes.MsgEthereumTxCustomGetSigner.Fn,
},
}
interfaceRegistry, _ := types.NewInterfaceRegistryWithOptions(types.InterfaceRegistryOptions{
ProtoFiles: proto.HybridResolver,
SigningOptions: signingOptions,
})
marshaler := codec.NewProtoCodec(interfaceRegistry)
txCfg := tx.NewTxConfig(marshaler, tx.DefaultSignModes)
// Register the evm types
enccodec.RegisterLegacyAminoCodec(amino)
enccodec.RegisterInterfaces(interfaceRegistry)
return EncodingConfig{
InterfaceRegistry: interfaceRegistry,
Codec: marshaler,
TxConfig: txCfg,
LegacyAmino: amino,
}
}
================================================
FILE: app/rpc/auth.go
================================================
package rpc
import (
"context"
"fmt"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"cosmossdk.io/store/prefix"
storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/types/query"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
"github.com/cosmos/cosmos-sdk/x/auth/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
ethermint "github.com/evmos/ethermint/types"
"github.com/irisnet/irishub/v4/app/keepers"
)
var _ authtypes.QueryServer = authQueryServer{}
type authQueryServer struct {
key storetypes.StoreKey
cdc codec.Codec
authtypes.QueryServer
}
// overrideAuthServices overrides auth query service
func overrideAuthServices(cdc codec.Codec, cfg module.Configurator, appKeepers keepers.AppKeepers) {
k := appKeepers.AccountKeeper
key := appKeepers.GetKey(authtypes.StoreKey)
ss := appKeepers.GetSubspace(authtypes.ModuleName)
types.RegisterMsgServer(cfg.MsgServer(), authkeeper.NewMsgServerImpl(k))
types.RegisterQueryServer(cfg.QueryServer(), authQueryServer{key: key, cdc: cdc, QueryServer: authkeeper.NewQueryServer(k)})
m := authkeeper.NewMigrator(k, cfg.QueryServer(), ss)
if err := cfg.RegisterMigration(types.ModuleName, 3, m.Migrate3to4); err != nil {
panic(fmt.Sprintf("failed to migrate x/%s from version 3 to 4: %v", types.ModuleName, err))
}
if err := cfg.RegisterMigration(types.ModuleName, 4, m.Migrate4To5); err != nil {
panic(fmt.Sprintf("failed to migrate x/%s from version 4 to 5", types.ModuleName))
}
}
// Since: cosmos-sdk 0.43
// Accounts returns all the existing accounts
func (a authQueryServer) Accounts(c context.Context, req *types.QueryAccountsRequest) (*types.QueryAccountsResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "empty request")
}
ctx := sdk.UnwrapSDKContext(c)
store := ctx.KVStore(a.key)
accountsStore := prefix.NewStore(store, types.AddressStoreKeyPrefix)
var accounts []*codectypes.Any
pageRes, err := query.Paginate(accountsStore, req.Pagination, func(key, value []byte) error {
account, err := a.decodeAccount(value)
if err != nil {
return err
}
any, err := codectypes.NewAnyWithValue(account)
if err != nil {
return err
}
accounts = append(accounts, any)
return nil
})
if err != nil {
return nil, status.Errorf(codes.Internal, "paginate: %v", err)
}
return &types.QueryAccountsResponse{Accounts: accounts, Pagination: pageRes}, err
}
// Account returns account details based on address.
func (a authQueryServer) Account(c context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) {
res, err := a.AccountInfo(c, &authtypes.QueryAccountInfoRequest{
Address: req.Address,
})
if err != nil {
return nil, err
}
any, err := codectypes.NewAnyWithValue(res.Info)
if err != nil {
return nil, status.Errorf(codes.Internal, err.Error())
}
return &types.QueryAccountResponse{Account: any}, nil
}
func (a authQueryServer) decodeAccount(bz []byte) (sdk.AccountI, error) {
var acc sdk.AccountI
if err := a.cdc.UnmarshalInterface(bz, &acc); err != nil {
return nil, err
}
ethAcc, ok := acc.(*ethermint.EthAccount)
if ok {
return ethAcc.BaseAccount, nil
}
return acc, nil
}
================================================
FILE: app/rpc/override.go
================================================
package rpc
import (
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/types/module"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/irisnet/irishub/v4/app/keepers"
)
var overrideModules = map[string]overrideHandler{
authtypes.ModuleName: overrideAuthServices,
}
type overrideHandler func(cdc codec.Codec, configurator module.Configurator, appKeepers keepers.AppKeepers)
// RegisterService allows a module to register services.
func RegisterService(cdc codec.Codec, mod module.AppModule, configurator module.Configurator, appKeepers keepers.AppKeepers) {
handler, has := overrideModules[mod.Name()]
if has {
handler(cdc, configurator, appKeepers)
return
}
m, ok := mod.(module.HasServices)
if ok {
m.RegisterServices(configurator)
}
}
================================================
FILE: app/sim_bench_test.go
================================================
package app
import (
"fmt"
"os"
"testing"
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/simulation"
simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli"
"github.com/irisnet/irishub/v4/app/params"
)
// Profile with:
// /usr/local/go/bin/go test -benchmem -run=^$ github.com/irisnet/app -bench ^BenchmarkFullAppSimulation$ -Commit=true -cpuprofile cpu.out
func BenchmarkFullAppSimulation(b *testing.B) {
b.ReportAllocs()
config := simcli.NewConfigFromFlags()
config.ChainID = AppChainID
db, dir, logger, skip, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim",
"Simulation",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
if err != nil {
b.Fatalf("simulation setup failed: %s", err.Error())
}
if skip {
b.Skip("skipping benchmark application simulation")
}
defer func() {
db.Close()
err = os.RemoveAll(dir)
if err != nil {
b.Fatal(err)
}
}()
app := NewIrisApp(
logger,
db,
nil,
true,
SimTestAppOptions{
options: map[string]interface{}{params.SimulationTest: true},
},
interBlockCacheOpt(),
)
// run randomized simulation
_, simParams, simErr := simulation.SimulateFromSeed(
b,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
// export state and simParams before the simulation error is checked
if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil {
b.Fatal(err)
}
if simErr != nil {
b.Fatal(simErr)
}
if config.Commit {
simtestutil.PrintStats(db)
}
}
func BenchmarkInvariants(b *testing.B) {
config := simcli.NewConfigFromFlags()
config.ChainID = AppChainID
db, dir, logger, skip, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim",
"Simulation",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
if err != nil {
b.Fatalf("simulation setup failed: %s", err.Error())
}
if skip {
b.Skip("skipping benchmark application simulation")
}
config.AllInvariants = false
defer func() {
db.Close()
err = os.RemoveAll(dir)
if err != nil {
b.Fatal(err)
}
}()
app := NewIrisApp(
logger,
db,
nil,
true,
SimTestAppOptions{
options: map[string]interface{}{params.SimulationTest: true},
},
interBlockCacheOpt(),
)
// run randomized simulation
_, simParams, simErr := simulation.SimulateFromSeed(
b,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
// export state and simParams before the simulation error is checked
if err = simtestutil.CheckExportSimulation(app, config, simParams); err != nil {
b.Fatal(err)
}
if simErr != nil {
b.Fatal(simErr)
}
if config.Commit {
simtestutil.PrintStats(db)
}
ctx := app.NewContextLegacy(true, tmproto.Header{Height: app.LastBlockHeight() + 1})
// 3. Benchmark each invariant separately
//
// NOTE: We use the crisis keeper as it has all the invariants registered with
// their respective metadata which makes it useful for testing/benchmarking.
for _, cr := range app.CrisisKeeper.Routes() {
cr := cr
b.Run(fmt.Sprintf("%s/%s", cr.ModuleName, cr.Route), func(b *testing.B) {
if res, stop := cr.Invar(ctx); stop {
b.Fatalf(
"broken invariant at block %d of %d\n%s",
ctx.BlockHeight()-1, config.NumBlocks, res,
)
}
})
}
}
================================================
FILE: app/sim_test.go
================================================
package app
import (
"encoding/json"
"fmt"
"math/rand"
"os"
"runtime/debug"
"strings"
"testing"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
coinswaptypes "mods.irisnet.org/modules/coinswap/types"
htlctypes "mods.irisnet.org/modules/htlc/types"
mttypes "mods.irisnet.org/modules/mt/types"
nfttypes "mods.irisnet.org/modules/nft/types"
oracletypes "mods.irisnet.org/modules/oracle/types"
randomtypes "mods.irisnet.org/modules/random/types"
servicetypes "mods.irisnet.org/modules/service/types"
tokentypes "mods.irisnet.org/modules/token/types"
"github.com/irisnet/irishub/v4/app/params"
iristypes "github.com/irisnet/irishub/v4/types"
abci "github.com/cometbft/cometbft/abci/types"
tmproto "github.com/cometbft/cometbft/proto/tendermint/types"
"cosmossdk.io/log"
"cosmossdk.io/store"
storetypes "cosmossdk.io/store/types"
evidencetypes "cosmossdk.io/x/evidence/types"
dbm "github.com/cosmos/cosmos-db"
"github.com/cosmos/cosmos-sdk/baseapp"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/cosmos/cosmos-sdk/x/simulation"
simcli "github.com/cosmos/cosmos-sdk/x/simulation/client/cli"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
)
// AppChainID hardcoded chainID for simulation
const AppChainID = "irishub-1"
// Get flags every time the simulator is run
func init() {
simcli.GetSimulatorFlags()
}
type StoreKeysPrefixes struct {
A storetypes.StoreKey
B storetypes.StoreKey
Prefixes [][]byte
}
// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of
// an IAVLStore for faster simulation speed.
func fauxMerkleModeOpt(bapp *baseapp.BaseApp) {
bapp.SetFauxMerkleMode()
}
// interBlockCacheOpt returns a BaseApp option function that sets the persistent
// inter-block write-through cache.
func interBlockCacheOpt() func(*baseapp.BaseApp) {
return baseapp.SetInterBlockCache(store.NewCommitKVStoreCacheManager())
}
func TestFullAppSimulation(t *testing.T) {
config := simcli.NewConfigFromFlags()
config.ChainID = AppChainID
db, dir, logger, skip, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim",
"Simulation",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
if skip {
t.Skip("skipping benchmark application simulation")
}
require.NoError(t, err, "simulation setup failed")
defer func() {
db.Close()
require.NoError(t, os.RemoveAll(dir))
}()
app := createApp(logger, db, fauxMerkleModeOpt)
require.Equal(t, "IrisApp", app.Name())
// run randomized simulation
_, simParams, simErr := simulation.SimulateFromSeed(
t,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
// export state and simParams before the simulation error is checked
err = simtestutil.CheckExportSimulation(app, config, simParams)
require.NoError(t, err)
require.NoError(t, simErr)
if config.Commit {
simtestutil.PrintStats(db)
}
}
func TestAppImportExport(t *testing.T) {
config := simcli.NewConfigFromFlags()
config.ChainID = AppChainID
db, dir, logger, skip, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim",
"Simulation",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
if skip {
t.Skip("skipping benchmark application simulation")
}
require.NoError(t, err, "simulation setup failed")
defer func() {
db.Close()
require.NoError(t, os.RemoveAll(dir))
}()
app := createApp(logger, db, fauxMerkleModeOpt)
require.Equal(t, "IrisApp", app.Name())
// Run randomized simulation
_, simParams, simErr := simulation.SimulateFromSeed(
t,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
// export state and simParams before the simulation error is checked
err = simtestutil.CheckExportSimulation(app, config, simParams)
require.NoError(t, err)
require.NoError(t, simErr)
if config.Commit {
simtestutil.PrintStats(db)
}
fmt.Printf("exporting genesis...\n")
exported, err := app.ExportAppStateAndValidators(false, []string{}, []string{})
require.NoError(t, err)
fmt.Printf("importing genesis...\n")
newDB, newDir, _, _, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim-2",
"Simulation-2",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
require.NoError(t, err, "simulation setup failed")
defer func() {
newDB.Close()
require.NoError(t, os.RemoveAll(newDir))
}()
newApp := createApp(logger, newDB, fauxMerkleModeOpt)
require.Equal(t, "IrisApp", newApp.Name())
var genesisState iristypes.GenesisState
err = json.Unmarshal(exported.AppState, &genesisState)
require.NoError(t, err)
defer func() {
if r := recover(); r != nil {
err := fmt.Sprintf("%v", r)
if !strings.Contains(err, "validator set is empty after InitGenesis") {
panic(r)
}
logger.Info("Skipping simulation as all validators have been unbonded")
logger.Info("err", err, "stacktrace", string(debug.Stack()))
}
}()
ctxA := app.NewContextLegacy(true, tmproto.Header{Height: app.LastBlockHeight()})
ctxB := newApp.NewContextLegacy(true, tmproto.Header{Height: app.LastBlockHeight()})
_, err = newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState)
if err != nil {
if strings.Contains(err.Error(), "validator set is empty after InitGenesis") {
logger.Info("Skipping simulation as all validators have been unbonded")
logger.Info("err", err, "stacktrace", string(debug.Stack()))
return
}
}
require.NoError(t, err)
err = newApp.StoreConsensusParams(ctxB, exported.ConsensusParams)
require.NoError(t, err)
fmt.Printf("comparing stores...\n")
storeKeysPrefixes := []StoreKeysPrefixes{
{app.AppKeepers.KvStoreKeys()[authtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[authtypes.StoreKey], [][]byte{}},
{
app.AppKeepers.KvStoreKeys()[stakingtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[stakingtypes.StoreKey],
[][]byte{
stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey,
stakingtypes.HistoricalInfoKey, stakingtypes.UnbondingIDKey, stakingtypes.UnbondingIndexKey,
stakingtypes.UnbondingTypeKey, stakingtypes.ValidatorUpdatesKey,
},
}, // ordering may change but it doesn't matter
{app.AppKeepers.KvStoreKeys()[slashingtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[slashingtypes.StoreKey], [][]byte{slashingtypes.ValidatorMissedBlockBitmapKeyPrefix}},
{app.AppKeepers.KvStoreKeys()[minttypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[minttypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[distrtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[distrtypes.StoreKey], [][]byte{}},
{
app.AppKeepers.KvStoreKeys()[banktypes.StoreKey],
newApp.AppKeepers.KvStoreKeys()[banktypes.StoreKey],
[][]byte{banktypes.BalancesPrefix},
},
{app.AppKeepers.KvStoreKeys()[paramtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[paramtypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[govtypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[govtypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[evidencetypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[evidencetypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[capabilitytypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[capabilitytypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[ibctransfertypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[ibctransfertypes.StoreKey], [][]byte{}},
// check irismod module
{app.AppKeepers.KvStoreKeys()[tokentypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[tokentypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[oracletypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[oracletypes.StoreKey], [][]byte{}},
// mt.Supply is InitSupply, can be not equal to TotalSupply
{app.AppKeepers.KvStoreKeys()[mttypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[mttypes.StoreKey], [][]byte{mttypes.PrefixMT}},
{app.AppKeepers.KvStoreKeys()[nfttypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[nfttypes.StoreKey], [][]byte{{0x05}}},
{
app.AppKeepers.KvStoreKeys()[servicetypes.StoreKey],
newApp.AppKeepers.KvStoreKeys()[servicetypes.StoreKey],
[][]byte{servicetypes.InternalCounterKey},
},
{
app.AppKeepers.KvStoreKeys()[randomtypes.StoreKey],
newApp.AppKeepers.KvStoreKeys()[randomtypes.StoreKey],
[][]byte{randomtypes.RandomKey},
},
{app.AppKeepers.KvStoreKeys()[htlctypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[htlctypes.StoreKey], [][]byte{}},
{app.AppKeepers.KvStoreKeys()[coinswaptypes.StoreKey], newApp.AppKeepers.KvStoreKeys()[coinswaptypes.StoreKey], [][]byte{}},
}
for _, skp := range storeKeysPrefixes {
storeA := ctxA.KVStore(skp.A)
storeB := ctxB.KVStore(skp.B)
failedKVAs, failedKVBs := simtestutil.DiffKVStores(storeA, storeB, skp.Prefixes)
require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare")
fmt.Printf(
"compared %d different key/value pairs between %s and %s\n",
len(failedKVAs),
skp.A,
skp.B,
)
if !assert.Equal(t, 0, len(failedKVAs), simtestutil.GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) {
for _, v := range failedKVAs {
t.Logf("store missmatch: %q\n", v)
}
t.FailNow()
}
}
}
func TestAppSimulationAfterImport(t *testing.T) {
config := simcli.NewConfigFromFlags()
config.ChainID = AppChainID
db, dir, logger, skip, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim",
"Simulation",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
if skip {
t.Skip("skipping benchmark application simulation")
}
require.NoError(t, err, "simulation setup failed")
defer func() {
db.Close()
require.NoError(t, os.RemoveAll(dir))
}()
app := createApp(logger, db, fauxMerkleModeOpt)
require.Equal(t, "IrisApp", app.Name())
// Run randomized simulation
stopEarly, simParams, simErr := simulation.SimulateFromSeed(
t,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
// export state and simParams before the simulation error is checked
err = simtestutil.CheckExportSimulation(app, config, simParams)
require.NoError(t, err)
require.NoError(t, simErr)
if config.Commit {
simtestutil.PrintStats(db)
}
if stopEarly {
fmt.Println("can't export or import a zero-validator genesis, exiting test...")
return
}
fmt.Printf("exporting genesis...\n")
exported, err := app.ExportAppStateAndValidators(true, []string{}, []string{})
require.NoError(t, err)
fmt.Printf("importing genesis...\n")
newDB, newDir, _, _, err := simtestutil.SetupSimulation(
config,
"goleveldb-app-sim-2",
"Simulation-2",
simcli.FlagVerboseValue,
simcli.FlagEnabledValue,
)
require.NoError(t, err, "simulation setup failed")
defer func() {
newDB.Close()
require.NoError(t, os.RemoveAll(newDir))
}()
newApp := createApp(logger, newDB, fauxMerkleModeOpt)
require.Equal(t, "IrisApp", newApp.Name())
_, err = newApp.InitChain(&abci.RequestInitChain{
AppStateBytes: exported.AppState,
ChainId: AppChainID,
})
require.NoError(t, err)
_, _, err = simulation.SimulateFromSeed(
t,
os.Stdout,
newApp.BaseApp,
simtestutil.AppStateFn(app.AppCodec(), app.SimulationManager(), app.DefaultGenesis()),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(newApp, newApp.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
newApp.AppCodec(),
)
require.NoError(t, err)
}
// TODO: Make another test for the fuzzer itself, which just has noOp txs
// and doesn't depend on the application.
func TestAppStateDeterminism(t *testing.T) {
if !simcli.FlagEnabledValue {
t.Skip("skipping application simulation")
}
config := simcli.NewConfigFromFlags()
config.InitialBlockHeight = 1
config.ExportParamsPath = ""
config.OnOperation = false
config.AllInvariants = false
config.ChainID = AppChainID
numSeeds := 3
numTimesToRunPerSeed := 5
appHashList := make([]json.RawMessage, numTimesToRunPerSeed)
for i := 0; i < numSeeds; i++ {
config.Seed = rand.Int63()
for j := 0; j < numTimesToRunPerSeed; j++ {
var logger log.Logger
if simcli.FlagVerboseValue {
logger = log.NewTestLogger(t)
} else {
logger = log.NewNopLogger()
}
db := dbm.NewMemDB()
app := createApp(logger, db, interBlockCacheOpt())
fmt.Printf(
"running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n",
config.Seed, i+1, numSeeds, j+1, numTimesToRunPerSeed,
)
_, _, err := simulation.SimulateFromSeed(
t,
os.Stdout,
app.BaseApp,
simtestutil.AppStateFn(
app.AppCodec(),
app.SimulationManager(),
app.DefaultGenesis(),
),
simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1
simtestutil.SimulationOperations(app, app.AppCodec(), config),
app.ModuleAccountAddrs(),
config,
app.AppCodec(),
)
require.NoError(t, err)
if config.Commit {
simtestutil.PrintStats(db)
}
appHash := app.LastCommitID().Hash
appHashList[j] = appHash
if j != 0 {
require.Equal(
t,
string(appHashList[0]),
string(appHashList[j]),
"non-determinism in seed %d: %d/%d, attempt: %d/%d\n",
config.Seed,
i+1,
numSeeds,
j+1,
numTimesToRunPerSeed,
)
}
}
}
}
// EmptyAppOptions is a stub implementing AppOptions
type EmptyAppOptions struct{}
// Get implements AppOptions
func (ao EmptyAppOptions) Get(o string) interface{} {
return nil
}
// SimTestAppOptions is a stub implementing AppOptions
type SimTestAppOptions struct {
options map[string]interface{}
}
// Get implements AppOptions
func (o SimTestAppOptions) Get(key string) interface{} {
return o.options[key]
}
func createApp(
logger log.Logger,
db dbm.DB,
baseAppOptions ...func(*baseapp.BaseApp),
) *IrisApp {
if baseAppOptions == nil {
baseAppOptions = []func(*baseapp.BaseApp){}
}
baseAppOptions = append(baseAppOptions, baseapp.SetChainID(AppChainID))
return NewIrisApp(
logger,
db,
nil,
true,
SimTestAppOptions{
options: map[string]interface{}{params.SimulationTest: true},
},
baseAppOptions...,
)
}
================================================
FILE:
gitextract_o9j_lv5k/
├── .dockerignore
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── custom.md
│ │ ├── feature_request.md
│ │ └── release.md
│ └── workflows/
│ ├── codeql-analysis.yml
│ ├── deploy-docs.yml
│ ├── publish-docker-image.yml
│ ├── releases.yml
│ └── run-unit-tests.yml
├── .gitignore
├── .golangci.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── RELEASE.md
├── app/
│ ├── ante/
│ │ ├── ante.go
│ │ ├── decorators.go
│ │ ├── handler_options.go
│ │ ├── reject_msgs.go
│ │ └── sigverify.go
│ ├── app.go
│ ├── encoding.go
│ ├── export.go
│ ├── keepers/
│ │ ├── keepers.go
│ │ ├── keys.go
│ │ └── types.go
│ ├── modules.go
│ ├── params/
│ │ ├── encoding.go
│ │ ├── params.go
│ │ └── proto.go
│ ├── rpc/
│ │ ├── auth.go
│ │ └── override.go
│ ├── sim_bench_test.go
│ ├── sim_test.go
│ ├── upgrade.go
│ └── upgrades/
│ ├── types.go
│ ├── v200/
│ │ ├── config.go
│ │ └── upgrades.go
│ ├── v210/
│ │ └── upgrades.go
│ ├── v300/
│ │ ├── constants.go
│ │ ├── lsm.go
│ │ └── upgrades.go
│ └── v400/
│ └── upgrades.go
├── buf.gen.swagger.yaml
├── buf.work.yaml
├── client/
│ ├── keystore/
│ │ ├── keys.go
│ │ ├── keys_test.go
│ │ └── keystore.go
│ └── lite/
│ ├── config.json
│ ├── statik/
│ │ └── statik.go
│ ├── swagger-ui/
│ │ ├── index.html
│ │ ├── swagger-ui-bundle.js
│ │ ├── swagger-ui-standalone-preset.js
│ │ ├── swagger-ui.css
│ │ └── swagger.yaml
│ └── swagger.go
├── cmd/
│ ├── contract_tests/
│ │ └── main.go
│ └── iris/
│ ├── cmd/
│ │ ├── genaccounts.go
│ │ ├── genesis.go
│ │ ├── keys.go
│ │ ├── root.go
│ │ ├── testnet.go
│ │ └── util.go
│ └── main.go
├── contrib/
│ └── devtools/
│ ├── Makefile
│ └── install-golangci-lint.sh
├── crypto/
│ └── keyring/
│ └── options.go
├── docker-compose.yml
├── docs/
│ ├── .vuepress/
│ │ ├── client.js
│ │ ├── compoments/
│ │ │ └── PageHistory.vue
│ │ ├── config.js
│ │ ├── enhanceApp.js
│ │ └── styles/
│ │ └── palette.styl
│ ├── Dockerfile
│ ├── README.md
│ ├── chainide-for-irisnet/
│ │ ├── configuration.md
│ │ ├── cosmos-usage.md
│ │ └── usage.md
│ ├── cli-client/
│ │ ├── auth.md
│ │ ├── bank.md
│ │ ├── debug.md
│ │ ├── distribution.md
│ │ ├── evm.md
│ │ ├── farm.md
│ │ ├── gov.md
│ │ ├── htlc.md
│ │ ├── intro.md
│ │ ├── keys.md
│ │ ├── mint.md
│ │ ├── nft.md
│ │ ├── oracle.md
│ │ ├── params.md
│ │ ├── random.md
│ │ ├── record.md
│ │ ├── service.md
│ │ ├── slashing.md
│ │ ├── staking.md
│ │ ├── status.md
│ │ ├── tendermint.md
│ │ ├── token.md
│ │ ├── tx.md
│ │ └── upgrade.md
│ ├── concepts/
│ │ ├── bech32-prefix.md
│ │ ├── fee.md
│ │ ├── general-concepts.md
│ │ ├── genesis-file.md
│ │ ├── gov-params.md
│ │ ├── key.md
│ │ ├── sentry-nodes.md
│ │ └── validator-faq.md
│ ├── daemon/
│ │ ├── commands.md
│ │ ├── export.md
│ │ ├── intro.md
│ │ └── local-testnet.md
│ ├── endpoints/
│ │ ├── grpc-client.md
│ │ ├── grpc-rest.md
│ │ ├── intro.md
│ │ ├── legacy-rest.md
│ │ ├── proto-docs.md
│ │ ├── protodoc-markdown.tmpl
│ │ └── sdk.md
│ ├── features/
│ │ ├── bank.md
│ │ ├── coinswap.md
│ │ ├── distribution.md
│ │ ├── evm.md
│ │ ├── governance.md
│ │ ├── guardian.md
│ │ ├── htlc.md
│ │ ├── mint.md
│ │ ├── mt.md
│ │ ├── nft-metadata.json
│ │ ├── nft.md
│ │ ├── oracle.md
│ │ ├── random.md
│ │ ├── service-pricing.json
│ │ ├── service-result.json
│ │ ├── service.md
│ │ ├── slashing.md
│ │ ├── staking.md
│ │ └── upgrade.md
│ ├── get-started/
│ │ ├── evm-contract.md
│ │ ├── explorers.md
│ │ ├── install.md
│ │ ├── intro.md
│ │ ├── mainnet.md
│ │ ├── state-sync.md
│ │ ├── testnet.md
│ │ └── wallets.md
│ ├── migration/
│ │ ├── account.md
│ │ └── keys.md
│ ├── package.json
│ ├── resources/
│ │ └── whitepaper.md
│ └── tools/
│ ├── kms/
│ │ ├── kms_cpu.md
│ │ └── kms_ledger.md
│ ├── kms.md
│ ├── ledger.md
│ ├── monitor.md
│ └── priv_validator_state.json
├── go.mod
├── go.sum
├── modules/
│ ├── evm/
│ │ ├── eip1559.go
│ │ ├── keeper.go
│ │ ├── moudle.go
│ │ ├── state_transition.go
│ │ └── types.go
│ ├── guardian/
│ │ ├── client/
│ │ │ ├── cli/
│ │ │ │ ├── cli_test.go
│ │ │ │ ├── flags.go
│ │ │ │ ├── query.go
│ │ │ │ └── tx.go
│ │ │ └── testutil/
│ │ │ └── test_helpers.go
│ │ ├── genesis.go
│ │ ├── genesis_test.go
│ │ ├── handler.go
│ │ ├── keeper/
│ │ │ ├── grpc_query.go
│ │ │ ├── grpc_query_test.go
│ │ │ ├── keeper.go
│ │ │ ├── keeper_test.go
│ │ │ └── msg_service.go
│ │ ├── module.go
│ │ └── types/
│ │ ├── codec.go
│ │ ├── errors.go
│ │ ├── event.go
│ │ ├── genesis.go
│ │ ├── genesis.pb.go
│ │ ├── guardian.pb.go
│ │ ├── keys.go
│ │ ├── msgs.go
│ │ ├── msgs_test.go
│ │ ├── query.pb.go
│ │ ├── query.pb.gw.go
│ │ ├── tx.pb.go
│ │ └── types.go
│ ├── internft/
│ │ ├── interface.go
│ │ └── keeper.go
│ └── mint/
│ ├── abci.go
│ ├── abci_test.go
│ ├── client/
│ │ ├── cli/
│ │ │ ├── cli_test.go
│ │ │ └── query.go
│ │ ├── rest/
│ │ │ ├── grpc_query_test.go
│ │ │ ├── query.go
│ │ │ └── rest.go
│ │ └── testutil/
│ │ └── test_helpers.go
│ ├── genesis.go
│ ├── keeper/
│ │ ├── grpc_query.go
│ │ ├── grpc_query_test.go
│ │ ├── keeper.go
│ │ ├── keeper_test.go
│ │ ├── migrations.go
│ │ ├── msg_server.go
│ │ └── params.go
│ ├── migrations/
│ │ └── v2/
│ │ ├── migrate.go
│ │ └── migrate_test.go
│ ├── module.go
│ ├── simulation/
│ │ ├── decoder.go
│ │ ├── decoder_test.go
│ │ └── genesis.go
│ └── types/
│ ├── codec.go
│ ├── errors.go
│ ├── events.go
│ ├── expected_keepers.go
│ ├── genesis.go
│ ├── genesis.pb.go
│ ├── keys.go
│ ├── mint.pb.go
│ ├── minter.go
│ ├── minter_test.go
│ ├── msg.go
│ ├── params.go
│ ├── query.pb.go
│ ├── query.pb.gw.go
│ └── tx.pb.go
├── network/
│ ├── hermes/
│ │ ├── README.md
│ │ ├── config.toml
│ │ ├── create-conn.sh
│ │ ├── restore-keys.sh
│ │ ├── start.sh
│ │ └── variables.sh
│ ├── init.sh
│ ├── nft-transfer.md
│ ├── relayer/
│ │ └── interchain-nft-config/
│ │ ├── chains/
│ │ │ ├── test-1.json
│ │ │ └── test-2.json
│ │ ├── paths/
│ │ │ └── test1-nft-test2.json
│ │ └── rly.sh
│ └── start.sh
├── proto/
│ ├── buf.gen.gogo.yaml
│ ├── buf.gen.pulsar.yaml
│ ├── buf.yaml
│ └── irishub/
│ ├── guardian/
│ │ ├── genesis.proto
│ │ ├── guardian.proto
│ │ ├── query.proto
│ │ └── tx.proto
│ └── mint/
│ ├── genesis.proto
│ ├── mint.proto
│ ├── query.proto
│ └── tx.proto
├── scripts/
│ ├── Makefile
│ ├── protoc-swagger-gen-evm.sh
│ ├── protoc-swagger-gen-ibc.sh
│ ├── protoc-swagger-gen.sh
│ └── protocgen.sh
├── sims.mk
├── testutil/
│ ├── app.go
│ └── test_helpers.go
├── types/
│ ├── address.go
│ ├── chain_id.go
│ ├── genesis.go
│ └── runtime.go
└── wrapper/
├── farm.go
└── token.go
SYMBOL INDEX (2200 symbols across 119 files)
FILE: app/ante/ante.go
function NewAnteHandler (line 16) | func NewAnteHandler(options HandlerOptions) sdk.AnteHandler {
FILE: app/ante/decorators.go
type ValidateTokenDecorator (line 20) | type ValidateTokenDecorator struct
method AnteHandle (line 32) | func (vtd ValidateTokenDecorator) AnteHandle(
function NewValidateTokenDecorator (line 25) | func NewValidateTokenDecorator(tk tokenkeeper.Keeper) ValidateTokenDecor...
type ValidateServiceDecorator (line 66) | type ValidateServiceDecorator struct
method AnteHandle (line 78) | func (vsd ValidateServiceDecorator) AnteHandle(
function NewValidateServiceDecorator (line 71) | func NewValidateServiceDecorator(simulateTest bool) ValidateServiceDecor...
function containSwapCoin (line 100) | func containSwapCoin(coins ...sdk.Coin) bool {
FILE: app/ante/handler_options.go
type HandlerOptions (line 22) | type HandlerOptions struct
function newEthAnteHandler (line 38) | func newEthAnteHandler(options HandlerOptions) sdk.AnteHandler {
function newCosmosAnteHandler (line 65) | func newCosmosAnteHandler(options HandlerOptions) sdk.AnteHandler {
function newCosmosAnteHandlerEip712 (line 96) | func newCosmosAnteHandlerEip712(options HandlerOptions) sdk.AnteHandler {
FILE: app/ante/reject_msgs.go
type RejectMessagesDecorator (line 12) | type RejectMessagesDecorator struct
method AnteHandle (line 19) | func (rmd RejectMessagesDecorator) AnteHandle(ctx sdk.Context, tx sdk....
FILE: app/ante/sigverify.go
constant secp256k1VerifyCost (line 16) | secp256k1VerifyCost uint64 = 21000
function DefaultSigVerificationGasConsumer (line 22) | func DefaultSigVerificationGasConsumer(
function ConsumeMultisignatureVerificationGas (line 45) | func ConsumeMultisignatureVerificationGas(
FILE: app/app.go
type IrisApp (line 64) | type IrisApp struct
method Name (line 283) | func (app *IrisApp) Name() string { return app.BaseApp.Name() }
method PreBlocker (line 286) | func (app *IrisApp) PreBlocker(ctx sdk.Context, _ *abci.RequestFinaliz...
method BeginBlocker (line 291) | func (app *IrisApp) BeginBlocker(ctx sdk.Context) (sdk.BeginBlock, err...
method EndBlocker (line 296) | func (app *IrisApp) EndBlocker(ctx sdk.Context) (sdk.EndBlock, error) {
method InitChainer (line 301) | func (app *IrisApp) InitChainer(ctx sdk.Context, req *abci.RequestInit...
method LoadHeight (line 313) | func (app *IrisApp) LoadHeight(height int64) error {
method ModuleAccountAddrs (line 318) | func (app *IrisApp) ModuleAccountAddrs() map[string]bool {
method BlockedModuleAccountAddrs (line 329) | func (app *IrisApp) BlockedModuleAccountAddrs() map[string]bool {
method LegacyAmino (line 342) | func (app *IrisApp) LegacyAmino() *codec.LegacyAmino {
method AppCodec (line 350) | func (app *IrisApp) AppCodec() codec.Codec {
method InterfaceRegistry (line 355) | func (app *IrisApp) InterfaceRegistry() types.InterfaceRegistry {
method EncodingConfig (line 360) | func (app *IrisApp) EncodingConfig() params.EncodingConfig {
method SimulationManager (line 370) | func (app *IrisApp) SimulationManager() *module.SimulationManager {
method BasicManager (line 375) | func (app *IrisApp) BasicManager() module.BasicManager {
method RegisterAPIRoutes (line 380) | func (app *IrisApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig co...
method RegisterServices (line 398) | func (app *IrisApp) RegisterServices() {
method RegisterTxService (line 409) | func (app *IrisApp) RegisterTxService(clientCtx client.Context) {
method RegisterTendermintService (line 419) | func (app *IrisApp) RegisterTendermintService(clientCtx client.Context) {
method RegisterNodeService (line 431) | func (app *IrisApp) RegisterNodeService(clientCtx client.Context, c co...
method DefaultGenesis (line 436) | func (app *IrisApp) DefaultGenesis() map[string]json.RawMessage {
method Init (line 441) | func (app *IrisApp) Init() {
method AutoCliOpts (line 446) | func (app *IrisApp) AutoCliOpts() autocli.AppOptions {
function NewIrisApp (line 83) | func NewIrisApp(
function NoOpMempoolOption (line 468) | func NoOpMempoolOption() func(*baseapp.BaseApp) {
FILE: app/export.go
method ExportAppStateAndValidators (line 23) | func (app *IrisApp) ExportAppStateAndValidators(
method prepForZeroHeightGenesis (line 63) | func (app *IrisApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowe...
method ExportGenesis (line 265) | func (app *IrisApp) ExportGenesis(ctx sdk.Context) (map[string]json.RawM...
FILE: app/keepers/keepers.go
type AppKeepers (line 119) | type AppKeepers struct
function New (line 180) | func New(
function initParamsKeeper (line 583) | func initParamsKeeper(
FILE: app/keepers/keys.go
method genStoreKeys (line 47) | func (appKeepers *AppKeepers) genStoreKeys() {
method KvStoreKeys (line 105) | func (appKeepers *AppKeepers) KvStoreKeys() map[string]*storetypes.KVSto...
method TransientStoreKeys (line 113) | func (appKeepers *AppKeepers) TransientStoreKeys() map[string]*storetype...
method MemoryStoreKeys (line 121) | func (appKeepers *AppKeepers) MemoryStoreKeys() map[string]*storetypes.M...
method GetKey (line 128) | func (appKeepers *AppKeepers) GetKey(storeKey string) *storetypes.KVStor...
method GetTKey (line 135) | func (appKeepers *AppKeepers) GetTKey(storeKey string) *storetypes.Trans...
method GetMemKey (line 142) | func (appKeepers *AppKeepers) GetMemKey(storeKey string) *storetypes.Mem...
method GetSubspace (line 149) | func (appKeepers *AppKeepers) GetSubspace(moduleName string) paramstypes...
FILE: app/keepers/types.go
type DistrKeeperAdapter (line 13) | type DistrKeeperAdapter struct
method GetFeePool (line 21) | func (a DistrKeeperAdapter) GetFeePool(ctx context.Context) (distrtype...
method SetFeePool (line 25) | func (a DistrKeeperAdapter) SetFeePool(ctx context.Context, feePool di...
function NewDistrKeeperAdapter (line 17) | func NewDistrKeeperAdapter(keeper distrkeeper.Keeper) DistrKeeperAdapter {
type GovKeeperAdapter (line 29) | type GovKeeperAdapter struct
method SubmitProposal (line 37) | func (a GovKeeperAdapter) SubmitProposal(ctx context.Context, messages...
method AddDeposit (line 41) | func (a GovKeeperAdapter) AddDeposit(ctx context.Context, proposalID u...
method GetProposal (line 45) | func (a GovKeeperAdapter) GetProposal(ctx context.Context, proposalID ...
method GetGovernanceAccount (line 49) | func (a GovKeeperAdapter) GetGovernanceAccount(ctx context.Context) sd...
function NewGovKeeperAdapter (line 33) | func NewGovKeeperAdapter(keeper *govkeeper.Keeper) GovKeeperAdapter {
FILE: app/modules.go
function newBasicManagerFromManager (line 128) | func newBasicManagerFromManager(app *IrisApp) module.BasicManager {
function appModules (line 140) | func appModules(
function simulationModules (line 288) | func simulationModules(
function orderBeginBlockers (line 424) | func orderBeginBlockers() []string {
function orderEndBlockers (line 476) | func orderEndBlockers() []string {
function orderInitBlockers (line 529) | func orderInitBlockers() []string {
FILE: app/params/encoding.go
type EncodingConfig (line 11) | type EncodingConfig struct
FILE: app/params/params.go
constant SimulationTest (line 5) | SimulationTest = "simulation_test"
FILE: app/params/proto.go
function MakeEncodingConfig (line 18) | func MakeEncodingConfig() EncodingConfig {
FILE: app/rpc/auth.go
type authQueryServer (line 28) | type authQueryServer struct
method Accounts (line 55) | func (a authQueryServer) Accounts(c context.Context, req *types.QueryA...
method Account (line 86) | func (a authQueryServer) Account(c context.Context, req *types.QueryAc...
method decodeAccount (line 101) | func (a authQueryServer) decodeAccount(bz []byte) (sdk.AccountI, error) {
function overrideAuthServices (line 35) | func overrideAuthServices(cdc codec.Codec, cfg module.Configurator, appK...
FILE: app/rpc/override.go
type overrideHandler (line 15) | type overrideHandler
function RegisterService (line 18) | func RegisterService(cdc codec.Codec, mod module.AppModule, configurator...
FILE: app/sim_bench_test.go
function BenchmarkFullAppSimulation (line 20) | func BenchmarkFullAppSimulation(b *testing.B) {
function BenchmarkInvariants (line 87) | func BenchmarkInvariants(b *testing.B) {
FILE: app/sim_test.go
constant AppChainID (line 52) | AppChainID = "irishub-1"
function init (line 55) | func init() {
type StoreKeysPrefixes (line 59) | type StoreKeysPrefixes struct
function fauxMerkleModeOpt (line 67) | func fauxMerkleModeOpt(bapp *baseapp.BaseApp) {
function interBlockCacheOpt (line 73) | func interBlockCacheOpt() func(*baseapp.BaseApp) {
function TestFullAppSimulation (line 77) | func TestFullAppSimulation(t *testing.T) {
function TestAppImportExport (line 126) | func TestAppImportExport(t *testing.T) {
function TestAppSimulationAfterImport (line 294) | func TestAppSimulationAfterImport(t *testing.T) {
function TestAppStateDeterminism (line 393) | func TestAppStateDeterminism(t *testing.T) {
type EmptyAppOptions (line 470) | type EmptyAppOptions struct
method Get (line 473) | func (ao EmptyAppOptions) Get(o string) interface{} {
type SimTestAppOptions (line 478) | type SimTestAppOptions struct
method Get (line 483) | func (o SimTestAppOptions) Get(key string) interface{} {
function createApp (line 487) | func createApp(
FILE: app/upgrade.go
method RegisterUpgradePlans (line 24) | func (app *IrisApp) RegisterUpgradePlans() {
method toolbox (line 29) | func (app *IrisApp) toolbox() upgrades.Toolbox {
method setupUpgradeStoreLoaders (line 39) | func (app *IrisApp) setupUpgradeStoreLoaders() {
method setupUpgradeHandlers (line 57) | func (app *IrisApp) setupUpgradeHandlers() {
FILE: app/upgrades/types.go
type Upgrade (line 19) | type Upgrade struct
type ConsensusParamsReaderWriter (line 31) | type ConsensusParamsReaderWriter interface
type Toolbox (line 37) | type Toolbox struct
type upgradeRouter (line 44) | type upgradeRouter struct
method Register (line 56) | func (r *upgradeRouter) Register(u Upgrade) *upgradeRouter {
method Routers (line 64) | func (r *upgradeRouter) Routers() map[string]Upgrade {
method UpgradeInfo (line 68) | func (r *upgradeRouter) UpgradeInfo(planName string) Upgrade {
function NewUpgradeRouter (line 52) | func NewUpgradeRouter() *upgradeRouter {
FILE: app/upgrades/v200/config.go
constant maxBlockGas (line 14) | maxBlockGas = 40000000
function generateFeemarketParams (line 38) | func generateFeemarketParams(enableHeight int64) feemarkettypes.Params {
FILE: app/upgrades/v200/upgrades.go
function upgradeHandlerConstructor (line 36) | func upgradeHandlerConstructor(
FILE: app/upgrades/v210/upgrades.go
function upgradeHandlerConstructor (line 29) | func upgradeHandlerConstructor(
FILE: app/upgrades/v300/lsm.go
type keeper (line 16) | type keeper interface
function migrateParamsStore (line 30) | func migrateParamsStore(ctx sdk.Context, k keeper) error {
function migrateValidators (line 42) | func migrateValidators(ctx sdk.Context, k keeper) error {
function migrateDelegations (line 58) | func migrateDelegations(ctx sdk.Context, k keeper) error {
function migrateUBDEntries (line 74) | func migrateUBDEntries(ctx sdk.Context, store storetypes.KVStore, cdc co...
function setUBDToStore (line 115) | func setUBDToStore(_ sdk.Context, store storetypes.KVStore, cdc codec.Bi...
function migrateStore (line 135) | func migrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc cod...
FILE: app/upgrades/v300/upgrades.go
function upgradeHandlerConstructor (line 28) | func upgradeHandlerConstructor(
function initICAModule (line 61) | func initICAModule(ctx sdk.Context, m *module.Manager, fromVM module.Ver...
function mergeLSModule (line 74) | func mergeLSModule(ctx sdk.Context, box upgrades.Toolbox) error {
function mergeEVM (line 81) | func mergeEVM(ctx sdk.Context, box upgrades.Toolbox) error {
function mergeFeeMarket (line 89) | func mergeFeeMarket(ctx sdk.Context, box upgrades.Toolbox) error {
function mergeToken (line 97) | func mergeToken(ctx sdk.Context, box upgrades.Toolbox) error {
function mergeGov (line 106) | func mergeGov(ctx sdk.Context, box upgrades.Toolbox) error {
FILE: app/upgrades/v400/upgrades.go
function upgradeHandlerConstructor (line 21) | func upgradeHandlerConstructor(
FILE: client/keystore/keys.go
function RecoveryAndExportPrivKeyArmor (line 15) | func RecoveryAndExportPrivKeyArmor(keystore []byte, password string) (ar...
function recoveryFromKeyStore (line 23) | func recoveryFromKeyStore(keystore []byte, auth string) (tmcrypto.PrivKe...
function exportPrivKeyArmor (line 45) | func exportPrivKeyArmor(privKey tmcrypto.PrivKey, password string) (armo...
FILE: client/keystore/keys_test.go
function TestRecoveryAndExportPrivKeyArmor (line 9) | func TestRecoveryAndExportPrivKeyArmor(t *testing.T) {
FILE: client/keystore/keystore.go
type PlainKeyJSON (line 20) | type PlainKeyJSON struct
type EncryptedKeyJSON (line 28) | type EncryptedKeyJSON struct
type CryptoJSON (line 36) | type CryptoJSON struct
type cipherparamsJSON (line 45) | type cipherparamsJSON struct
function decryptKey (line 49) | func decryptKey(keyProtected *EncryptedKeyJSON, auth string) ([]byte, er...
function getKDFKey (line 85) | func getKDFKey(cryptoJSON CryptoJSON, auth string) ([]byte, error) {
function ensureInt (line 109) | func ensureInt(x interface{}) int {
function aesCTRXOR (line 117) | func aesCTRXOR(key, inText, iv []byte) ([]byte, error) {
FILE: client/lite/statik/statik.go
function init (line 10) | func init() {
FILE: client/lite/swagger-ui/swagger-ui-bundle.js
function n (line 7) | function n(r) {
function e (line 50) | function e(e, t) {
function a (line 83) | function a(e) {
function t (line 105) | function t(e, t) {
function n (line 109) | function n(e) {
function r (line 113) | function r(e) {
function o (line 117) | function o(e) {
function i (line 121) | function i(e) {
function a (line 125) | function a(e) {
function u (line 129) | function u(e) {
function s (line 133) | function s(e) {
function l (line 137) | function l(e) {
function c (line 141) | function c(e) {
function w (line 160) | function w(e) {
function E (line 164) | function E(e) {
function x (line 168) | function x() {}
function S (line 170) | function S(e, t) {
function C (line 176) | function C(e) {
function k (line 180) | function k(e, t) {
function A (line 189) | function A() {
function O (line 193) | function O(e, t, n) {
function P (line 197) | function P(e, t) {
function T (line 201) | function T(e, t) {
function M (line 205) | function M(e, t, n) {
function U (line 215) | function U(e) {
function q (line 219) | function q(e, t, n, r) {
function F (line 227) | function F() {
function z (line 234) | function z(e) {
function B (line 238) | function B(e) {
function V (line 242) | function V(e) {
function H (line 247) | function H(e) {
function W (line 252) | function W(e) {
function J (line 256) | function J(e) {
function Y (line 264) | function Y(e) {
function K (line 268) | function K(e) {
function G (line 272) | function G(e) {
function ee (line 312) | function ee(e) {
function te (line 316) | function te(e) {
function ne (line 321) | function ne(e) {
function re (line 325) | function re(e) {
function oe (line 329) | function oe(e) {
function ie (line 333) | function ie() {
function ae (line 337) | function ae(e) {
function ue (line 343) | function ue(e) {
function se (line 349) | function se(e) {
function le (line 353) | function le(e, t, n, r) {
function ce (line 365) | function ce(e, t, n, r) {
function fe (line 381) | function fe(e, t) {
function pe (line 395) | function pe(e) {
function de (line 399) | function de(e) {
function he (line 403) | function he(e, t) {
function ve (line 413) | function ve(e, t) {
function me (line 440) | function me(e, t) {
function ge (line 448) | function ge(e, t) {
function ye (line 452) | function ye(e, t, n) {
function be (line 460) | function be() {
function _e (line 464) | function _e() {}
function we (line 466) | function we() {}
function Ee (line 468) | function Ee() {}
function Se (line 620) | function Se(e) {
function Ce (line 624) | function Ce(e) {
function ke (line 680) | function ke(e) {
function Le (line 702) | function Le(e) {
function Ue (line 706) | function Ue(e) {
function qe (line 715) | function qe(e) {
function Ve (line 809) | function Ve(e, t) {
function He (line 813) | function He(e, t, n) {
function We (line 817) | function We(e, t, n) {
function Je (line 821) | function Je(e, t, n) {
function Ye (line 825) | function Ye(e, t, n) {
function Ke (line 829) | function Ke(e, t, n) {
function Ge (line 833) | function Ge(e, t) {
function $e (line 837) | function $e(e, t) {
function Ze (line 845) | function Ze(e, t, n, r) {
function Xe (line 850) | function Xe() {
function Qe (line 854) | function Qe(e, t, n) {
function et (line 870) | function et(e, t, n, r, o, i, a, u) {
function tt (line 874) | function tt(e) {
function nt (line 878) | function nt(e, t, n, r, o) {
function rt (line 885) | function rt(e, t, n) {
function ot (line 896) | function ot(e, t, n) {
function it (line 900) | function it(e) {
function at (line 908) | function at(e, t, n) {
function ut (line 922) | function ut(e) {
function st (line 926) | function st(e, t, n, r) {
function pt (line 1073) | function pt(e) {
function dt (line 1086) | function dt(e) {
function mt (line 1171) | function mt(e, t) {
function _t (line 1201) | function _t(e, t) {
function wt (line 1240) | function wt(e, t, n, r, o, i, a) {
function Et (line 1245) | function Et() {
function xt (line 1249) | function xt(e, t, n, r, o, i) {
function St (line 1261) | function St(e, t) {
function Ct (line 1265) | function Ct(e, t) {
function kt (line 1273) | function kt(e, t, n) {
function At (line 1306) | function At(e, t, n) {
function Ot (line 1317) | function Ot(e) {
function Pt (line 1321) | function Pt(e) {
function Tt (line 1330) | function Tt(e) {
function Mt (line 1334) | function Mt(e, t, n, r) {
function It (line 1339) | function It() {
function jt (line 1343) | function jt(e, t, n) {
function Nt (line 1362) | function Nt(e, t) {
function Rt (line 1366) | function Rt(e) {
function Dt (line 1370) | function Dt(e) {
function Lt (line 1374) | function Lt(e) {
function Ut (line 1378) | function Ut(e) {
function qt (line 1412) | function qt(e, t, n) {
function Ft (line 1436) | function Ft(e, t) {
function zt (line 1461) | function zt(e, t, n, r) {
function Bt (line 1491) | function Bt(e, t, n, r) {
function Vt (line 1529) | function Vt(e, t, n, r) {
function Ht (line 1557) | function Ht(e, t, n) {
function Wt (line 1589) | function Wt(e, t, n) {
function Jt (line 1605) | function Jt(e, t, n) {
function Yt (line 1619) | function Yt(e, t, n) {
function Kt (line 1624) | function Kt(e, t, r) {
function Gt (line 1653) | function Gt(e, t) {
function $t (line 1657) | function $t(e) {
function Zt (line 1661) | function Zt(e) {
function Xt (line 1665) | function Xt(e) {
function Qt (line 1669) | function Qt(e) {
function en (line 1673) | function en() {
function tn (line 1677) | function tn(e, t) {
function nn (line 1681) | function nn(e) {
function rn (line 1690) | function rn(e, t) {
function an (line 1870) | function an(e, t, n) {
function un (line 1875) | function un(e) {
function sn (line 1879) | function sn(e) {
function ln (line 1888) | function ln(e) {
function dn (line 1970) | function dn(e, t) {
function hn (line 1974) | function hn(e, t) {
function vn (line 1979) | function vn() {
function mn (line 1983) | function mn(e) {
function gn (line 1992) | function gn(e) {
function _n (line 2004) | function _n(e, t) {
function wn (line 2009) | function wn() {
function En (line 2013) | function En(e) {
function xn (line 2017) | function xn(e) {
function An (line 2088) | function An(e, t, n, r) {
function On (line 2093) | function On() {
function Pn (line 2097) | function Pn(e, t) {
function In (line 2494) | function In(e, t) {
function jn (line 2498) | function jn(e, t) {
function Nn (line 2502) | function Nn(e) {
function Rn (line 2508) | function Rn(e) {
function Dn (line 2514) | function Dn(e) {
function Ln (line 2518) | function Ln() {
function Un (line 2522) | function Un(e, t) {
function qn (line 2526) | function qn(e, t) {
function _ (line 2830) | function _(e) {
function x (line 2840) | function x(e) {
function S (line 2844) | function S(e) {
function C (line 2849) | function C(e) {
function a (line 3126) | function a(e) {
function u (line 3131) | function u(e) {
function s (line 3140) | function s(e, t) {
function l (line 3151) | function l(e, t, n) {
function c (line 3168) | function c(e, t, n, r) {
function f (line 3184) | function f(e) {
function p (line 3205) | function p(e) {
function l (line 3257) | function l(e, t) {
function c (line 3261) | function c(e) {
function f (line 3266) | function f(e, t) {
function p (line 3271) | function p(e, t) {
function d (line 3292) | function d(e) {
function i (line 3359) | function i(e) {
function o (line 3486) | function o(e, t) {
function a (line 3491) | function a(e) {
function u (line 3495) | function u(e) {
function f (line 3507) | function f(e, t) {
function v (line 3520) | function v(e) {
function r (line 3638) | function r(e) {
function i (line 3674) | function i(e) {
function a (line 3680) | function a(e) {
function m (line 3744) | function m() {
function y (line 3763) | function y() {
function b (line 3767) | function b(e, t) {
function _ (line 3771) | function _(e) {
function a (line 3850) | function a(e) {
function s (line 3889) | function s(e, t, n, r) {
function a (line 3987) | function a() {
function u (line 3991) | function u(e, t) {
function s (line 3996) | function s(e, t, n) {
function l (line 4005) | function l(e, t, n, r) {
function c (line 4034) | function c(e) {
function f (line 4039) | function f(e, t) {
function p (line 4045) | function p(e, t) {
function d (line 4052) | function d(e) {
function h (line 4057) | function h(e, t) {
function v (line 4087) | function v(e, t, n) {
function m (line 4092) | function m(e, t, n, r, o) {
function g (line 4106) | function g(e, t, n, r, o) {
function y (line 4136) | function y(e, t, n, r) {
function b (line 4151) | function b(e, t, n, r) {
function _ (line 4155) | function _(e, t, n, r) {
function w (line 4162) | function w(e, t, n, r) {
function E (line 4166) | function E(e, t, n, r) {
function x (line 4170) | function x(e, t, n, r) {
function S (line 4177) | function S(e, t, n) {
function C (line 4181) | function C(e, t, n) {
function A (line 4394) | function A(e, t, n) {
function O (line 4401) | function O(e, t, n) {
function P (line 4408) | function P(e, t, n) {
function T (line 4415) | function T(e, t, n) {
function M (line 4420) | function M(e, t, n) {
function I (line 4425) | function I(e, t, n, r, o, i) {
function j (line 4431) | function j(e, t, n, r) {
function N (line 4436) | function N(e, t, n, r) {
function R (line 4441) | function R(e, t, n, r, o, i) {
function D (line 4446) | function D(e, t, n, r, i) {
function L (line 4450) | function L(e, t, n, r, i) {
function q (line 4607) | function q(e) {
function F (line 4611) | function F(e, t) {
function z (line 4652) | function z(e) {
function B (line 4662) | function B(e, t, n, r) {
function i (line 4670) | function i() {
function a (line 4674) | function a() {
function u (line 4678) | function u(e) {
function p (line 4706) | function p() {
function d (line 4710) | function d() {
function h (line 4735) | function h(e, t) {
function v (line 4739) | function v() {}
function r (line 4767) | function r(e, t) {
function o (line 4771) | function o(e) {
function i (line 4783) | function i(e) {
function f (line 4905) | function f(e) {
function p (line 4910) | function p() {
function d (line 4914) | function d(e) {
function s (line 5075) | function s(e) {
function l (line 5079) | function l(e) {
function r (line 5203) | function r(e) {
function a (line 5228) | function a(e, t, n) {
function u (line 5241) | function u(e) {
function o (line 5287) | function o(e, t) {
function o (line 5349) | function o() {
function s (line 5384) | function s(e) {
function c (line 5397) | function c() {
function f (line 5401) | function f(e) {
function n (line 5539) | function n(e) {
function r (line 5575) | function r(e, t) {
function s (line 5598) | function s(e, t, n) {
function l (line 5606) | function l(e) {
function c (line 5610) | function c(e) {
function f (line 5618) | function f(e, t, n) {
function p (line 5626) | function p(e) {
function a (line 5757) | function a(e, t, n, o) {
function o (line 5794) | function o() {
function s (line 6026) | function s(e) {
function i (line 6165) | function i(e, t) {
function a (line 6169) | function a(e, t, n) {
function a (line 6338) | function a(e, t, n, o) {
function r (line 6523) | function r() {
function n (line 6817) | function n(e) {
function r (line 6821) | function r(e) {
function o (line 6831) | function o(e, t) {
function s (line 6874) | function s(e) {
function l (line 6894) | function l(e) {
function a (line 6985) | function a(e) {
function f (line 7123) | function f(e, t) {
function n (line 7132) | function n() {
function r (line 7136) | function r(e) {
function o (line 7140) | function o(e) {
function i (line 7144) | function i(e) {
function o (line 7181) | function o() {
function a (line 7231) | function a(e) {
function m (line 7258) | function m() {}
function g (line 7260) | function g(e, t) {
function y (line 7287) | function y(e) {
function b (line 7292) | function b(e, t, n, r, o, i, a) {
function _ (line 7296) | function _(e, t, n, r) {
function w (line 7302) | function w(e, t) {
function E (line 7324) | function E(e) {
function x (line 7328) | function x(e, t) {
function S (line 7334) | function S(e, t) {
function T (line 7756) | function T(e) {
function M (line 7763) | function M(e, t) {
function j (line 7788) | function j(e) {
function b (line 7906) | function b(e) {
function l (line 8285) | function l(e) {
function c (line 8298) | function c(e) {
function f (line 8307) | function f(e, t, n) {
function a (line 8370) | function a() {
function u (line 8383) | function u(e, t, n) {
function s (line 8395) | function s(e, t, n) {
function u (line 8445) | function u(e, t, n, r) {
function o (line 8524) | function o(e, t, n) {
function o (line 8585) | function o(e) {
function s (line 8602) | function s(e, t) {
function c (line 8609) | function c(e, t, n) {
function f (line 8613) | function f(e, t, n) {
function p (line 8624) | function p(e, t) {
function d (line 8632) | function d(e, t, n) {
function u (line 8701) | function u(e) {
function s (line 8705) | function s(e) {
function l (line 8709) | function l(e) {
function p (line 8723) | function p(e) {
function o (line 8769) | function o(e, t) {
function a (line 8822) | function a(e) {
function u (line 8826) | function u(e) {
function s (line 8834) | function s(e, t) {
function r (line 8914) | function r() {
function o (line 8925) | function o(e, t) {
function i (line 8929) | function i(e) {
function a (line 8940) | function a(e) {
function u (line 8944) | function u(e, t) {
function t (line 8990) | function t(t, n, r, o, i) {
function l (line 9065) | function l(e) {
function r (line 9315) | function r(e, t, n, r, o) {
function u (line 9750) | function u(e, t, n) {
function s (line 9754) | function s(e, t, n) {
function l (line 9758) | function l() {}
function d (line 9837) | function d() {
function h (line 9841) | function h() {
function v (line 9845) | function v(e) {
function m (line 9858) | function m(e) {
function n (line 9892) | function n() {
function i (line 10008) | function i(e, t) {
function y (line 10236) | function y(e, t) {
function b (line 10246) | function b(e) {
function _ (line 10251) | function _(e, t, n, r, o) {
function w (line 10273) | function w(e, t, n, r) {
function x (line 10297) | function x(e, t) {
function S (line 10303) | function S(e) {
function C (line 10308) | function C(e) {
function k (line 10312) | function k(e, t) {
function A (line 10316) | function A(e, t) {
function O (line 10321) | function O(e) {
function P (line 10325) | function P(e, t) {
function T (line 10329) | function T(e) {
function M (line 10334) | function M(e, t) {
function I (line 10371) | function I(e) {
function j (line 10377) | function j(e, t) {
function N (line 10381) | function N(e, t) {
function l (line 10412) | function l(t, r) {
function c (line 10416) | function c() {
function v (line 10430) | function v(t) {
function m (line 10434) | function m(t) {
function g (line 10438) | function g() {
function y (line 10442) | function y() {
function b (line 10446) | function b() {
function o (line 10519) | function o(e, t) {
function i (line 10540) | function i(e, t) {
function i (line 10585) | function i(e) {
function a (line 10629) | function a(e) {
function u (line 10633) | function u(e) {
function s (line 10645) | function s(e, t) {
function l (line 10657) | function l(e) {
function c (line 10666) | function c(e, t) {
function f (line 10671) | function f(e) {
function p (line 10676) | function p(e) {
function d (line 10680) | function d(e) {
function i (line 10720) | function i(e) {
function a (line 10740) | function a() {
function u (line 10747) | function u(e, t, n) {
function s (line 10895) | function s(e) {
function s (line 10989) | function s(e) {
function a (line 11027) | function a(e) {
function s (line 11110) | function s(e) {
function l (line 11239) | function l(e) {
function p (line 11260) | function p(e) {
function i (line 11544) | function i(e) {
function g (line 11624) | function g(e) {
function r (line 11632) | function r() {
function r (line 11653) | function r() {
function r (line 11675) | function r(t, n) {
function n (line 11711) | function n() {
function e (line 11774) | function e(t) {
function o (line 11810) | function o(e) {
function i (line 11816) | function i(e) {
function s (line 12041) | function s(e) {
function l (line 12045) | function l(e, t) {
function s (line 12116) | function s() {
function l (line 12125) | function l(e, t, n) {
function l (line 12185) | function l(e, t) {
function l (line 12270) | function l(e, t) {
function p (line 12307) | function p(e) {
function _ (line 12368) | function _(e) {
function w (line 12376) | function w(e, t, n) {
function E (line 12380) | function E(e) {
function x (line 12384) | function x(e) {
function A (line 12637) | function A(e) {
function O (line 12641) | function O(e) {
function P (line 12645) | function P(e, t, n, r, o) {
function T (line 12655) | function T(e, t, n, r) {
function M (line 12660) | function M(e, t, n) {
function I (line 12664) | function I(e) {
function j (line 12672) | function j(e) {
function N (line 12676) | function N(e) {
function i (line 12950) | function i(e) {
function t (line 12982) | function t(r) {
function r (line 13021) | function r(e) {
function o (line 13027) | function o(e, t) {
function i (line 13035) | function i(e, t) {
function a (line 13043) | function a(e, t) {
function u (line 13047) | function u(e, t) {
function s (line 13051) | function s(e, t, n) {
function r (line 13181) | function r(e) {
function o (line 13187) | function o(e, t) {
function i (line 13212) | function i() {
function a (line 13220) | function a(e) {
function u (line 13224) | function u(e, t) {
function s (line 13243) | function s(e) {
function l (line 13261) | function l() {
function r (line 13409) | function r(e) {
function o (line 13415) | function o(e) {
function i (line 13421) | function i(e, t, n) {
function a (line 13430) | function a(e, t, n) {
function u (line 13436) | function u(e, t, n) {
function s (line 13444) | function s(e, t, n) {
function l (line 13464) | function l(e) {
function c (line 13468) | function c(e) {
function f (line 13475) | function f(e) {
function p (line 13481) | function p(e) {
function d (line 13485) | function d(e) {
function h (line 13489) | function h(e) {
function v (line 13497) | function v(e) {
function m (line 13501) | function m(e) {
function g (line 13505) | function g(e) {
function y (line 13509) | function y(e, t) {
function r (line 13674) | function r(e) {
function o (line 13680) | function o(e) {
function t (line 13708) | function t(e) {
function n (line 13778) | function n() {
function r (line 13804) | function r(e) {
function o (line 13810) | function o(e) {
function r (line 13884) | function r(e) {
function e (line 13913) | function e(t) {
function e (line 14230) | function e(e) {
function r (line 14322) | function r(e) {
function o (line 14328) | function o(e, t) {
function i (line 14336) | function i(e, t) {
function a (line 14340) | function a(e) {
function u (line 14344) | function u(e, t) {
function s (line 14359) | function s(e) {
function l (line 14366) | function l(e, t) {
function c (line 14376) | function c(e) {
function f (line 14381) | function f(e) {
function p (line 14385) | function p(e) {
function d (line 14389) | function d(e, t) {
function h (line 14396) | function h(e, t, n, r) {
function r (line 14582) | function r(e) {
function r (line 14614) | function r(e) {
function r (line 14640) | function r(e) {
function o (line 14646) | function o(e, t) {
function i (line 14652) | function i(e, t, n) {
function e (line 14666) | function e(t) {
function r (line 14703) | function r(e) {
function r (line 14752) | function r(e) {
function o (line 14758) | function o() {
function i (line 14778) | function i(e) {
function r (line 14865) | function r(e) {
function o (line 14871) | function o(e) {
function i (line 14945) | function i(e) {
function r (line 15126) | function r(e) {
function r (line 15232) | function r(e) {
function o (line 15238) | function o(e) {
function r (line 15354) | function r(e) {
function o (line 15360) | function o(e) {
function r (line 15446) | function r(e) {
function o (line 15452) | function o(e) {
function u (line 15645) | function u(e) {
function s (line 15649) | function s(e) {
function l (line 15746) | function l(e, t) {
function c (line 15755) | function c(e, n, r, o) {
function f (line 15800) | function f(e, n, r, o) {
function p (line 15807) | function p(e, n, r, o) {
function d (line 15832) | function d(e, n, r) {
function s (line 15884) | function s(e) {
function l (line 15892) | function l(e) {
function c (line 15898) | function c(e, t, n, o) {
function f (line 15913) | function f(e, t, n) {
function c (line 15936) | function c(e) {
function u (line 15991) | function u(e) {
function f (line 16117) | function f(t) {
function s (line 16192) | function s(e) {
function l (line 16223) | function l(e) {
function c (line 16231) | function c(e) {
function i (line 16256) | function i(n) {
function a (line 16316) | function a(e) {
function f (line 16334) | function f(e) {
function l (line 16473) | function l(e) {
function l (line 16480) | function l() {
function l (line 16513) | function l(e) {
function l (line 16520) | function l() {
function f (line 16606) | function f(e) {
function p (line 16612) | function p() {
function t (line 16619) | function t() {
function t (line 16644) | function t() {
function t (line 16678) | function t() {
function t (line 16691) | function t() {
function t (line 16711) | function t(e, n) {
function t (line 16765) | function t() {
function t (line 16789) | function t() {
function d (line 16827) | function d(e) {
function t (line 16833) | function t() {
function u (line 16938) | function u(e) {
function l (line 16950) | function l(e) {
function f (line 19195) | function f(e) {
function p (line 19201) | function p(e) {
function a (line 19217) | function a(e) {
function s (line 19271) | function s(e) {
function f (line 19359) | function f(e) {
function a (line 19383) | function a(e) {
function i (line 19427) | function i(e) {
function f (line 19541) | function f(e) {
function t (line 19547) | function t() {
function c (line 19594) | function c(e) {
function t (line 19600) | function t() {
function l (line 19711) | function l(e) {
function t (line 19717) | function t() {
function p (line 19765) | function p(e) {
function t (line 19772) | function t(e, n) {
function c (line 19888) | function c(e) {
function t (line 19894) | function t(e, n) {
function c (line 20005) | function c(e) {
function t (line 20011) | function t() {
function c (line 20098) | function c(e) {
function s (line 20123) | function s(e) {
function a (line 20159) | function a(e) {
function h (line 20201) | function h(e) {
function t (line 20207) | function t(e) {
function d (line 20411) | function d(e) {
function t (line 20417) | function t() {
function a (line 20449) | function a(e) {
function i (line 20482) | function i(e) {
function u (line 20541) | function u(e) {
function p (line 21537) | function p(e) {
function l (line 21871) | function l(e) {
function c (line 21878) | function c(e, t, n) {
function y (line 21933) | function y(e) {
function e (line 21942) | function e() {
function w (line 22216) | function w() {
function E (line 22240) | function E(e) {
function c (line 22285) | function c(e) {
function f (line 22289) | function f(e, t) {
function p (line 22293) | function p(e, t, n) {
function d (line 22299) | function d(e, t, n, r) {
function h (line 22303) | function h(e, t, n) {
function v (line 22312) | function v(e, t, n, r, o) {
function m (line 22319) | function m(e, t, n) {
function l (line 22400) | function l(e, t) {
function p (line 22739) | function p(e, t) {
function d (line 22743) | function d(e) {
function h (line 22747) | function h(e) {
function v (line 22756) | function v(e) {
function m (line 22763) | function m(t) {
function g (line 22794) | function g(e) {
function y (line 22801) | function y(e) {
function b (line 22811) | function b(e) {
function f (line 22914) | function f(e, t) {
function p (line 22919) | function p(e, n) {
function d (line 22942) | function d(e, t) {
function h (line 22947) | function h(e, t) {
function v (line 22958) | function v(e, t) {
function m (line 22964) | function m(e, t) {
function o (line 23157) | function o(e, t) {
function r (line 23164) | function r(e, t) {
function a (line 23253) | function a(e) {
function i (line 23267) | function i(e) {
function s (line 23670) | function s(e) {
function a (line 23932) | function a(e) {
function a (line 24276) | function a(e, t, n) {
function u (line 24312) | function u(e, t, n) {
function h (line 24343) | function h(e) {
function v (line 24347) | function v(e, t) {
function m (line 24356) | function m(e, t) {
function g (line 24360) | function g() {
function o (line 24416) | function o() {
function o (line 24422) | function o(t) {
function i (line 24426) | function i() {
function u (line 24432) | function u() {
function s (line 24436) | function s() {
function l (line 24440) | function l(e) {
function c (line 24444) | function c() {
function e (line 24454) | function e() {
function d (line 24542) | function d(e) {
function h (line 24546) | function h(e) {
function n (line 24583) | function n(e) {
function i (line 24610) | function i(e) {
function i (line 25618) | function i(e) {
function Ae (line 25782) | function Ae(e) {
function Oe (line 25790) | function Oe(e) {
function r (line 26234) | function r(r, o) {
function _ (line 26302) | function _(e, t, n, r) {
function w (line 26343) | function w(e, t, n) {
function E (line 26357) | function E() {}
function x (line 26359) | function x() {}
function S (line 26361) | function S() {}
function C (line 26363) | function C(e) {
function k (line 26371) | function k(e) {
function A (line 26397) | function A(e, t) {
function O (line 26412) | function O(e) {
function P (line 26419) | function P(e) {
function T (line 26424) | function T(e) {
function M (line 26430) | function M(e) {
function I (line 26450) | function I() {
function i (line 26464) | function i(e) {
function w (line 26491) | function w(e) {
function E (line 26495) | function E(e) {
function x (line 26499) | function x(e) {
function S (line 26503) | function S(e) {
function C (line 26507) | function C(e) {
function k (line 26512) | function k(e) {
function A (line 26516) | function A(e) {
function M (line 26521) | function M(e, t) {
function I (line 26525) | function I(e, t) {
function j (line 26529) | function j(e, t) {
function R (line 26543) | function R(e, t, n, r) {
function D (line 26553) | function D(e, t, n, o) {
function L (line 26558) | function L(e, t, n, r, o, i, a, u) {
function U (line 26568) | function U(e) {
function q (line 26573) | function q(e, t, n) {
function F (line 26586) | function F(e) {
function z (line 26591) | function z(e, t) {
function B (line 26595) | function B(e, t) {
function V (line 26607) | function V(e) {
function H (line 26623) | function H(e) {
function W (line 26630) | function W(e, t, n, o, i) {
function J (line 26786) | function J(e) {
function Y (line 26808) | function Y(e, t) {
function K (line 26818) | function K(e, t, n) {
function G (line 26824) | function G(e, t) {
function o (line 26847) | function o(e, t, n, r, o) {
function i (line 26961) | function i(e) {
function a (line 26965) | function a(e) {
function j (line 27374) | function j(e) {
function N (line 27385) | function N(e) {
function R (line 27394) | function R(e, t) {
function D (line 27399) | function D(e, t) {
function L (line 27403) | function L(e) {
function U (line 27407) | function U(e) {
function q (line 27411) | function q(e) {
function F (line 27415) | function F(e) {
function J (line 27424) | function J(e, t, n, r, o) {
function Y (line 27445) | function Y(e, t, n, r) {
function K (line 27490) | function K(e, t) {
function G (line 27496) | function G(e) {
function $ (line 27500) | function $(e, t) {
function Z (line 27506) | function Z(e, t, n) {
function X (line 27523) | function X(e, t, n, r, i, a) {
function Q (line 27569) | function Q(e, t) {
function ee (line 27584) | function ee(e, t) {
function o (line 27617) | function o(e) {
function b (line 27647) | function b(t) {
function _ (line 27653) | function _(e) {
function w (line 27658) | function w() {
function E (line 27667) | function E(e) {
function x (line 27671) | function x() {
function b (line 27923) | function b(e, t) {
function _ (line 27938) | function _(e) {
function E (line 27944) | function E(e, t, n, o) {
function x (line 27968) | function x(e, t, n, o) {
function a (line 28019) | function a(e) {
function o (line 28046) | function o(e, t, n, o) {
function o (line 28056) | function o(e, t, n, o) {
function h (line 28084) | function h(e, t, n) {
function y (line 28092) | function y(e) {
function b (line 28097) | function b(e) {
function _ (line 28101) | function _() {
function w (line 28105) | function w(e, t) {
function E (line 28111) | function E(e, t) {
function x (line 28115) | function x(e, t, n) {
function C (line 28123) | function C() {
function k (line 28127) | function k(e) {
function A (line 28131) | function A(e, t, n) {
function O (line 28137) | function O(e, t, n) {
function P (line 28141) | function P(e, t, n) {
function T (line 28145) | function T(e, t, n) {
function o (line 28205) | function o(e) {
function j (line 28583) | function j(e) {
function N (line 28594) | function N(e, t) {
function R (line 28598) | function R(e, t, n, r) {
function D (line 28611) | function D() {
function L (line 28615) | function L() {
function U (line 28619) | function U() {
function q (line 28623) | function q() {
function z (line 28652) | function z() {
function B (line 28656) | function B() {
function V (line 28684) | function V() {
function $ (line 28716) | function $(e, t) {
function X (line 28721) | function X(e) {
function o (line 29057) | function o(e, t) {
function l (line 29087) | function l() {
function c (line 29091) | function c(e) {
function s (line 29186) | function s(e) {
function s (line 29236) | function s() {
function s (line 29292) | function s(e, t) {
function l (line 29296) | function l(e, t) {
function u (line 29430) | function u(e, t, n, r) {
function y (line 29491) | function y(e) {}
function b (line 29493) | function b(e, t) {
function o (line 29703) | function o(e, t, n, r) {
function l (line 29730) | function l(e) {
function e (line 29753) | function e(t) {
function o (line 29803) | function o(e, t) {
function l (line 29910) | function l() {
function f (line 29938) | function f(e) {
function p (line 29944) | function p(e, t) {
function d (line 29948) | function d(e) {
function f (line 30060) | function f(e) {
function a (line 30090) | function a(e, t, n, r) {
function r (line 30157) | function r(e) {
function o (line 30162) | function o(e) {
function y (line 30488) | function y(e, t) {
function x (line 30588) | function x(e) {
function S (line 30592) | function S(e) {
function o (line 30710) | function o(e, t, n, o) {
function i (line 30727) | function i(e, t, n, o) {
function o (line 30735) | function o(e, t, n, o) {
function a (line 30766) | function a(e, t, n, o) {
function o (line 30840) | function o(e, t, n, o) {
function i (line 30860) | function i(e, t, n, o) {
function o (line 30868) | function o(e, t, n, o) {
function o (line 30880) | function o(e, t, n, o) {
function i (line 30969) | function i(e) {
function a (line 30983) | function a(e) {
function t (line 30989) | function t(n, r) {
function e (line 31029) | function e(e, t, n, r, a, u) {
function t (line 31033) | function t() {
function i (line 31086) | function i(e, r) {
function c (line 31212) | function c(e) {
function e (line 31509) | function e() {}
function i (line 31687) | function i() {
function b (line 31729) | function b(e, t, n) {
function S (line 31902) | function S(e) {
function C (line 31906) | function C(e, t) {
function k (line 31911) | function k(e, t) {
function A (line 31917) | function A(e) {
function O (line 31922) | function O(e) {
function P (line 31929) | function P(e, t) {
function T (line 31933) | function T(e, t, n) {
function M (line 31939) | function M(e) {
function I (line 31953) | function I(e) {
function r (line 32011) | function r(e, t) {
function i (line 32060) | function i(e, t) {
function t (line 32102) | function t(e) {
function n (line 32107) | function n(e) {
function r (line 32111) | function r(e) {
function o (line 32126) | function o(e) {
function i (line 32136) | function i(e) {
function a (line 32141) | function a(e) {
function u (line 32151) | function u(e) {
function s (line 32157) | function s(e) {
function l (line 32163) | function l() {
function c (line 32206) | function c(e, t) {
function f (line 32219) | function f(e) {
function p (line 32231) | function p(e) {
function d (line 32243) | function d(e, t) {
function c (line 32525) | function c(e) {
function f (line 32536) | function f(e, t, n, o) {
function n (line 32598) | function n(e) {
function r (line 32608) | function r(e) {
function o (line 32612) | function o(e) {
function o (line 32623) | function o(e) {
function i (line 32627) | function i(e) {
function a (line 32631) | function a(e) {
function u (line 32635) | function u(e) {
function s (line 32641) | function s(e) {
function t (line 32881) | function t(e) {
function n (line 32886) | function n(e) {
function r (line 32890) | function r(e) {
function o (line 32905) | function o(e) {
function i (line 32915) | function i(e) {
function a (line 32920) | function a(e) {
function u (line 32930) | function u(e) {
function s (line 32936) | function s(e) {
function l (line 32942) | function l() {
function c (line 32985) | function c(e, t) {
function f (line 32998) | function f(e) {
function p (line 33010) | function p(e) {
function d (line 33022) | function d(e, t) {
function i (line 33133) | function i(e, t) {
function l (line 33203) | function l(e, t) {
function u (line 33357) | function u(e, t) {
function n (line 33391) | function n(e, t) {
function p (line 33662) | function p(e) {
function t (line 33669) | function t(e, n) {
function l (line 33865) | function l(e) {
function t (line 33871) | function t() {
function l (line 33907) | function l(e) {
function t (line 33913) | function t() {
function l (line 33987) | function l(e) {
function t (line 33993) | function t() {
function l (line 34041) | function l(e) {
function t (line 34047) | function t() {
function c (line 34090) | function c(e) {
function t (line 34096) | function t(e, n) {
function l (line 34193) | function l(e) {
function t (line 34199) | function t() {
function l (line 34264) | function l(e) {
function t (line 34270) | function t() {
function c (line 34311) | function c(e) {
function t (line 34317) | function t(e, n) {
function l (line 34398) | function l(e) {
function t (line 34404) | function t(e, n) {
function f (line 34498) | function f(e) {
function t (line 34504) | function t(e, n) {
function c (line 34807) | function c(e) {
function t (line 34813) | function t() {
function c (line 34850) | function c(e) {
function t (line 34864) | function t() {
function h (line 34954) | function h(e) {
function t (line 34960) | function t(e, n) {
function t (line 35004) | function t(e) {
function c (line 35069) | function c(e) {
function t (line 35077) | function t() {
function f (line 35137) | function f(e) {
function t (line 35143) | function t() {
function p (line 35230) | function p(e) {
function t (line 35236) | function t() {
function f (line 35436) | function f(e) {
function t (line 35442) | function t() {
function c (line 35514) | function c(e) {
function t (line 35520) | function t() {
function f (line 35551) | function f(e) {
function t (line 35557) | function t() {
function i (line 35594) | function i(e) {
function i (line 35633) | function i(e) {
function p (line 35660) | function p(e) {
function t (line 35666) | function t() {
function p (line 35741) | function p(e) {
function t (line 35747) | function t() {
function d (line 35866) | function d(e) {
function t (line 35872) | function t(e, n) {
function h (line 36008) | function h(e) {
function t (line 36014) | function t() {
function f (line 36222) | function f(e) {
function t (line 36228) | function t() {
function o (line 36320) | function o(e) {
function i (line 36342) | function i(e) {
function d (line 36382) | function d(e) {
function t (line 36388) | function t(e, n) {
function c (line 36566) | function c(e) {
function t (line 36572) | function t() {
function f (line 36617) | function f(e) {
function t (line 36627) | function t() {
function c (line 36688) | function c(e) {
function t (line 36694) | function t() {
function h (line 36788) | function h(e) {
function c (line 36809) | function c(e) {
function t (line 36815) | function t() {
function c (line 36873) | function c(e) {
function t (line 36879) | function t() {
function t (line 36947) | function t(e) {
function f (line 36997) | function f(e) {
function t (line 37003) | function t() {
function t (line 37019) | function t() {
function t (line 37042) | function t() {
function t (line 37061) | function t() {
function t (line 37079) | function t() {
function l (line 37154) | function l(e) {
function t (line 37160) | function t() {
function s (line 37198) | function s(e) {
function t (line 37204) | function t() {
function l (line 37227) | function l(e) {
function t (line 37233) | function t() {
function l (line 37259) | function l(e) {
function t (line 37265) | function t() {
function p (line 37318) | function p(e) {
function t (line 37325) | function t(e, n) {
function c (line 37468) | function c(e) {
function t (line 37474) | function t() {
function u (line 37562) | function u(e) {
function l (line 37580) | function l(e) {
function t (line 37586) | function t() {
function l (line 37646) | function l(e) {
function t (line 37652) | function t() {
function c (line 37696) | function c(e) {
function t (line 37702) | function t(e, n) {
function l (line 37780) | function l(e) {
function t (line 37786) | function t(e, n) {
function f (line 37864) | function f(e) {
function t (line 37870) | function t() {
function e (line 37911) | function e(e, t) {
function i (line 37922) | function i() {
function d (line 37976) | function d(e) {
function t (line 37982) | function t() {
function o (line 38084) | function o(e) {
function v (line 38118) | function v(e) {
function t (line 38124) | function t() {
function p (line 38304) | function p(e) {
function t (line 38314) | function t() {
function p (line 38391) | function p(e) {
function t (line 38401) | function t() {
function o (line 38489) | function o(e) {
function l (line 38516) | function l(e) {
function t (line 38522) | function t() {
function l (line 38562) | function l(e) {
function t (line 38568) | function t() {
function o (line 38604) | function o(e) {
function o (line 38623) | function o(e) {
function c (line 38710) | function c(e, t, n) {
function f (line 38714) | function f(e, t) {
function i (line 38743) | function i() {
function i (line 38922) | function i() {
function i (line 38946) | function i(e, t, n, i) {
function s (line 38972) | function s(e, t, n, s) {
function r (line 39051) | function r(e) {
function a (line 39113) | function a(e, t) {
function u (line 39117) | function u(e, t, n) {
function i (line 39151) | function i(e) {
function a (line 39155) | function a() {
function a (line 39650) | function a() {
function r (line 39680) | function r(e, t, n, r, o) {
function r (line 39810) | function r(e, t) {
function o (line 39815) | function o(e, t) {
function r (line 39984) | function r(e, t) {
function r (line 40078) | function r(e, t) {
function u (line 40193) | function u() {
function s (line 40199) | function s(e) {
function r (line 40228) | function r(e) {
function r (line 40419) | function r(e) {
function o (line 40423) | function o(e, t) {
function r (line 40662) | function r(e, t) {
function l (line 40780) | function l(e, t) {
function c (line 40785) | function c(e) {
function b (line 40804) | function b(e) {
function l (line 41067) | function l(e) {
function t (line 41073) | function t() {
function y (line 41147) | function y(e) {
function _ (line 41162) | function _(e) {
function t (line 41165) | function t() {
function t (line 41204) | function t() {
function t (line 41259) | function t(e, n) {
function t (line 41359) | function t() {
function t (line 41389) | function t() {
function e (line 41442) | function e(e, t) {
function u (line 41455) | function u(e) {
function t (line 41460) | function t(e) {
function g (line 41618) | function g(e) {
function y (line 41623) | function y(e) {
function b (line 41646) | function b(t) {
function _ (line 41652) | function _(e) {
function w (line 41657) | function w() {
function E (line 41666) | function E(e) {
function x (line 41670) | function x() {
function o (line 41762) | function o(e) {
function i (line 41766) | function i(e) {
FILE: client/lite/swagger-ui/swagger-ui-standalone-preset.js
function n (line 7) | function n(r) {
function l (line 258) | function l(t) {
function p (line 263) | function p() {
function h (line 267) | function h(t) {
function s (line 364) | function s(t) {
function c (line 368) | function c(t) {
function o (line 431) | function o() {
function u (line 435) | function u() {
function a (line 439) | function a(t) {
function p (line 467) | function p() {
function h (line 471) | function h() {
function d (line 496) | function d(t, e) {
function v (line 500) | function v() {}
function r (line 544) | function r(t) {
function u (line 569) | function u(t, e, n) {
function a (line 582) | function a(t) {
function n (line 725) | function n(t) {
function r (line 761) | function r(t, e) {
function r (line 892) | function r(t) {
function u (line 916) | function u() {
function a (line 920) | function a(t, e) {
function s (line 925) | function s(t, e, n) {
function c (line 934) | function c(t, e, n, r) {
function f (line 963) | function f(t) {
function l (line 968) | function l(t, e) {
function p (line 974) | function p(t, e) {
function h (line 981) | function h(t) {
function d (line 986) | function d(t, e) {
function v (line 1016) | function v(t, e, n) {
function y (line 1021) | function y(t, e, n, r, i) {
function g (line 1035) | function g(t, e, n, r, i) {
function m (line 1065) | function m(t, e, n, r) {
function _ (line 1080) | function _(t, e, n, r) {
function b (line 1084) | function b(t, e, n, r) {
function w (line 1091) | function w(t, e, n, r) {
function x (line 1095) | function x(t, e, n, r) {
function S (line 1099) | function S(t, e, n, r) {
function E (line 1106) | function E(t, e, n) {
function A (line 1110) | function A(t, e, n) {
function j (line 1323) | function j(t, e, n) {
function k (line 1330) | function k(t, e, n) {
function I (line 1337) | function I(t, e, n) {
function M (line 1344) | function M(t, e, n) {
function T (line 1349) | function T(t, e, n) {
function C (line 1354) | function C(t, e, n, r, i, o) {
function P (line 1360) | function P(t, e, n, r) {
function R (line 1365) | function R(t, e, n, r) {
function N (line 1370) | function N(t, e, n, r, i, o) {
function L (line 1375) | function L(t, e, n, r, o) {
function D (line 1379) | function D(t, e, n, r, o) {
function F (line 1536) | function F(t) {
function U (line 1540) | function U(t, e) {
function B (line 1581) | function B(t) {
function q (line 1591) | function q(t, e, n, r) {
function s (line 1616) | function s(t) {
function o (line 1699) | function o(t, e) {
function u (line 1703) | function u(t, e, n) {
function u (line 1936) | function u(t) {
function s (line 1969) | function s(t) {
function n (line 2013) | function n() {
function r (line 2017) | function r(t) {
function i (line 2021) | function i(t) {
function o (line 2025) | function o(t) {
function i (line 2062) | function i() {
function u (line 2112) | function u(t) {
function y (line 2139) | function y() {}
function g (line 2141) | function g(t, e) {
function m (line 2168) | function m(t) {
function _ (line 2173) | function _(t, e, n, r, i, o, u) {
function b (line 2177) | function b(t, e, n, r) {
function w (line 2183) | function w(t, e) {
function x (line 2205) | function x(t) {
function S (line 2209) | function S(t, e) {
function E (line 2215) | function E(t, e) {
function t (line 2772) | function t(t, e) {
function u (line 2825) | function u(t) {
function a (line 2852) | function a(t, e, n) {
function s (line 2856) | function s(t, e, n) {
function c (line 2860) | function c() {}
function b (line 3065) | function b(t) {
function S (line 3075) | function S(t) {
function E (line 3079) | function E(t) {
function A (line 3084) | function A(t) {
function e (line 3301) | function e(t, e) {
function n (line 3305) | function n(t) {
function r (line 3309) | function r(t) {
function i (line 3313) | function i(t) {
function o (line 3317) | function o(t) {
function u (line 3321) | function u(t) {
function a (line 3325) | function a(t) {
function s (line 3329) | function s(t) {
function c (line 3333) | function c(t) {
function f (line 3337) | function f(t) {
function w (line 3356) | function w(t) {
function x (line 3360) | function x(t) {
function S (line 3364) | function S() {}
function E (line 3366) | function E(t, e) {
function A (line 3372) | function A(t) {
function O (line 3376) | function O(t, e) {
function j (line 3385) | function j() {
function k (line 3389) | function k(t, e, n) {
function I (line 3393) | function I(t, e) {
function M (line 3397) | function M(t, e) {
function T (line 3401) | function T(t, e, n) {
function z (line 3411) | function z(t) {
function F (line 3415) | function F(t, e, n, r) {
function U (line 3423) | function U() {
function B (line 3430) | function B(t) {
function q (line 3434) | function q(t) {
function Y (line 3438) | function Y(t) {
function W (line 3443) | function W(t) {
function V (line 3448) | function V(t) {
function K (line 3452) | function K(t) {
function G (line 3460) | function G(t) {
function $ (line 3464) | function $(t) {
function H (line 3468) | function H(t) {
function tt (line 3508) | function tt(t) {
function et (line 3512) | function et(t) {
function nt (line 3517) | function nt(t) {
function rt (line 3521) | function rt(t) {
function it (line 3525) | function it(t) {
function ot (line 3529) | function ot() {
function ut (line 3533) | function ut(t) {
function at (line 3539) | function at(t) {
function st (line 3545) | function st(t) {
function ct (line 3549) | function ct(t, e, n, r) {
function ft (line 3561) | function ft(t, e, n, r) {
function lt (line 3577) | function lt(t, e) {
function pt (line 3591) | function pt(t) {
function ht (line 3595) | function ht(t) {
function dt (line 3599) | function dt(t, e) {
function vt (line 3609) | function vt(t, e) {
function yt (line 3636) | function yt(t, e) {
function gt (line 3644) | function gt(t, e) {
function mt (line 3648) | function mt(t, e, n) {
function _t (line 3656) | function _t() {
function bt (line 3660) | function bt() {}
function wt (line 3662) | function wt() {}
function xt (line 3664) | function xt() {}
function Et (line 3816) | function Et(t) {
function At (line 3820) | function At(t) {
function Ot (line 3876) | function Ot(t) {
function Dt (line 3898) | function Dt(t) {
function zt (line 3902) | function zt(t) {
function Ft (line 3911) | function Ft(t) {
function Yt (line 4005) | function Yt(t, e) {
function Wt (line 4009) | function Wt(t, e, n) {
function Vt (line 4013) | function Vt(t, e, n) {
function Kt (line 4017) | function Kt(t, e, n) {
function Gt (line 4021) | function Gt(t, e, n) {
function $t (line 4025) | function $t(t, e, n) {
function Ht (line 4029) | function Ht(t, e) {
function Jt (line 4033) | function Jt(t, e) {
function Zt (line 4041) | function Zt(t, e, n, r) {
function Xt (line 4046) | function Xt() {
function Qt (line 4050) | function Qt(t, e, n) {
function te (line 4066) | function te(t, e, n, r, i, o, u, a) {
function ee (line 4070) | function ee(t) {
function ne (line 4074) | function ne(t, e, n, r, i) {
function re (line 4081) | function re(t, e, n) {
function ie (line 4092) | function ie(t, e, n) {
function oe (line 4096) | function oe(t) {
function ue (line 4104) | function ue(t, e, n) {
function ae (line 4118) | function ae(t) {
function se (line 4122) | function se(t, e, n, r) {
function pe (line 4269) | function pe(t) {
function he (line 4282) | function he(t) {
function ye (line 4367) | function ye(t, e) {
function be (line 4397) | function be(t, e) {
function we (line 4436) | function we(t, e, n, r, i, o, u) {
function xe (line 4441) | function xe() {
function Se (line 4445) | function Se(t, e, n, r, i, o) {
function Ee (line 4457) | function Ee(t, e) {
function Ae (line 4461) | function Ae(t, e) {
function Oe (line 4469) | function Oe(t, e, n) {
function je (line 4502) | function je(t, e, n) {
function ke (line 4513) | function ke(t) {
function Ie (line 4517) | function Ie(t) {
function Me (line 4526) | function Me(t) {
function Te (line 4530) | function Te(t, e, n, r) {
function Ce (line 4535) | function Ce() {
function Pe (line 4539) | function Pe(t, e, n) {
function Re (line 4558) | function Re(t, e) {
function Ne (line 4562) | function Ne(t) {
function Le (line 4566) | function Le(t) {
function De (line 4570) | function De(t) {
function ze (line 4574) | function ze(t) {
function Fe (line 4608) | function Fe(t, e, n) {
function Ue (line 4632) | function Ue(t, e) {
function Be (line 4657) | function Be(t, e, n, r) {
function qe (line 4687) | function qe(t, e, n, r) {
function Ye (line 4725) | function Ye(t, e, n, r) {
function We (line 4753) | function We(t, e, n) {
function Ve (line 4785) | function Ve(t, e, n) {
function Ke (line 4801) | function Ke(t, e, n) {
function Ge (line 4815) | function Ge(t, e, n) {
function $e (line 4820) | function $e(t, e, r) {
function He (line 4849) | function He(t, e) {
function Je (line 4853) | function Je(t) {
function Ze (line 4857) | function Ze(t) {
function Xe (line 4861) | function Xe(t) {
function Qe (line 4865) | function Qe(t) {
function tn (line 4869) | function tn() {
function en (line 4873) | function en(t, e) {
function nn (line 4877) | function nn(t) {
function rn (line 4886) | function rn(t, e) {
function un (line 5066) | function un(t, e, n) {
function an (line 5071) | function an(t) {
function sn (line 5075) | function sn(t) {
function cn (line 5084) | function cn(t) {
function hn (line 5166) | function hn(t, e) {
function dn (line 5170) | function dn(t, e) {
function vn (line 5175) | function vn() {
function yn (line 5179) | function yn(t) {
function gn (line 5188) | function gn(t) {
function bn (line 5200) | function bn(t, e) {
function wn (line 5205) | function wn() {
function xn (line 5209) | function xn(t) {
function Sn (line 5213) | function Sn(t) {
function jn (line 5284) | function jn(t, e, n, r) {
function kn (line 5289) | function kn() {
function In (line 5293) | function In(t, e) {
function Cn (line 5690) | function Cn(t, e) {
function Pn (line 5694) | function Pn(t, e) {
function Rn (line 5698) | function Rn(t) {
function Nn (line 5704) | function Nn(t) {
function Ln (line 5710) | function Ln(t) {
function Dn (line 5714) | function Dn() {
function zn (line 5718) | function zn(t, e) {
function Fn (line 5722) | function Fn(t, e) {
function o (line 5861) | function o(t, e) {
function c (line 5907) | function c(t) {
function m (line 6056) | function m(t, e) {
function _ (line 6066) | function _(t) {
function b (line 6071) | function b(t, e, n, r, i) {
function w (line 6093) | function w(t, e, n, r) {
function S (line 6117) | function S(t, e) {
function E (line 6123) | function E(t) {
function A (line 6128) | function A(t) {
function O (line 6132) | function O(t, e) {
function j (line 6136) | function j(t, e) {
function k (line 6141) | function k(t) {
function I (line 6145) | function I(t, e) {
function M (line 6149) | function M(t) {
function T (line 6154) | function T(t, e) {
function C (line 6191) | function C(t) {
function P (line 6197) | function P(t, e) {
function R (line 6201) | function R(t, e) {
function c (line 6232) | function c(e, r) {
function f (line 6236) | function f() {
function v (line 6250) | function v(e) {
function y (line 6254) | function y(e) {
function g (line 6258) | function g() {
function m (line 6262) | function m() {
function _ (line 6266) | function _() {
function i (line 6339) | function i(t, e) {
function o (line 6360) | function o(t, e) {
function o (line 6405) | function o(t) {
function u (line 6449) | function u(t) {
function a (line 6453) | function a(t) {
function s (line 6465) | function s(t, e) {
function c (line 6477) | function c(t) {
function f (line 6486) | function f(t, e) {
function l (line 6491) | function l(t) {
function p (line 6496) | function p(t) {
function h (line 6500) | function h(t) {
function o (line 6540) | function o(t) {
function u (line 6560) | function u() {
function a (line 6567) | function a(t, e, n) {
function u (line 7715) | function u(t) {
function c (line 7741) | function c(t) {
function e (line 7747) | function e() {
function f (line 8160) | function f(t) {
function l (line 8164) | function l(t, e) {
function p (line 8168) | function p(t, e, n) {
function h (line 8174) | function h(t, e, n, r) {
function d (line 8178) | function d(t, e, n) {
function v (line 8187) | function v(t, e, n, r, i) {
function y (line 8194) | function y(t, e, n) {
function c (line 8275) | function c(t, e) {
function p (line 8620) | function p(t, e) {
function h (line 8624) | function h(t) {
function d (line 8628) | function d(t) {
function v (line 8637) | function v(t) {
function y (line 8644) | function y(e) {
function g (line 8675) | function g(t) {
function m (line 8682) | function m(t) {
function _ (line 8692) | function _(t) {
function l (line 8795) | function l(t, e) {
function p (line 8800) | function p(t, n) {
function h (line 8823) | function h(t, e) {
function d (line 8828) | function d(t, e) {
function v (line 8839) | function v(t, e) {
function y (line 8845) | function y(t, e) {
function t (line 8899) | function t(t, e, n, r, u, a) {
function e (line 8903) | function e() {
function p (line 8958) | function p(t) {
function e (line 8964) | function e(t, n) {
function c (line 9115) | function c(t) {
function f (line 9122) | function f(t, e, n) {
function o (line 9175) | function o(t) {
function s (line 9667) | function s(t) {
function u (line 9932) | function u(t) {
function u (line 10457) | function u(t) {
function l (line 10595) | function l(t, e) {
function u (line 10609) | function u(t, e, n) {
function a (line 10645) | function a(t, e, n) {
function d (line 10676) | function d(t) {
function v (line 10680) | function v(t, e) {
function y (line 10689) | function y(t, e) {
function g (line 10693) | function g() {
function i (line 10749) | function i() {
function i (line 10755) | function i(e) {
function o (line 10759) | function o() {
function a (line 10765) | function a() {
function s (line 10769) | function s() {
function c (line 10773) | function c(t) {
function f (line 10777) | function f() {
function t (line 10787) | function t() {
function h (line 10875) | function h(t) {
function d (line 10879) | function d(t) {
function n (line 10916) | function n(t) {
function o (line 10943) | function o(t) {
function c (line 11967) | function c(t) {
function f (line 11975) | function f(t) {
function o (line 11996) | function o(t) {
function w (line 12023) | function w(t) {
function x (line 12027) | function x(t) {
function S (line 12031) | function S(t) {
function E (line 12035) | function E(t) {
function A (line 12039) | function A(t) {
function O (line 12044) | function O(t) {
function j (line 12048) | function j(t) {
function T (line 12053) | function T(t, e) {
function C (line 12057) | function C(t, e) {
function P (line 12061) | function P(t, e) {
function N (line 12075) | function N(t, e, n, r) {
function L (line 12085) | function L(t, e, n, i) {
function D (line 12090) | function D(t, e, n, r, i, o, u, a) {
function z (line 12100) | function z(t) {
function F (line 12105) | function F(t, e, n) {
function U (line 12118) | function U(t) {
function B (line 12123) | function B(t, e) {
function q (line 12127) | function q(t, e) {
function Y (line 12139) | function Y(t) {
function W (line 12155) | function W(t) {
function V (line 12162) | function V(t, e, n, i, o) {
function K (line 12318) | function K(t) {
function G (line 12340) | function G(t, e) {
function $ (line 12350) | function $(t, e, n) {
function H (line 12356) | function H(t, e) {
function i (line 12379) | function i(t, e, n, r, i) {
function o (line 12493) | function o(t) {
function u (line 12497) | function u(t) {
function P (line 12906) | function P(t) {
function R (line 12917) | function R(t) {
function N (line 12926) | function N(t, e) {
function L (line 12931) | function L(t, e) {
function D (line 12935) | function D(t) {
function z (line 12939) | function z(t) {
function F (line 12943) | function F(t) {
function U (line 12947) | function U(t) {
function K (line 12956) | function K(t, e, n, r, i) {
function G (line 12977) | function G(t, e, n, r) {
function $ (line 13022) | function $(t, e) {
function H (line 13028) | function H(t) {
function J (line 13032) | function J(t, e) {
function Z (line 13038) | function Z(t, e, n) {
function X (line 13055) | function X(t, e, n, r, o, u) {
function Q (line 13101) | function Q(t, e) {
function tt (line 13116) | function tt(t, e) {
function o (line 13140) | function o(n) {
FILE: client/lite/swagger.go
function RegisterSwaggerAPI (line 15) | func RegisterSwaggerAPI(ctx client.Context, rtr *mux.Router) {
FILE: cmd/contract_tests/main.go
function main (line 10) | func main() {
FILE: cmd/iris/cmd/genaccounts.go
constant flagVestingStart (line 24) | flagVestingStart = "vesting-start-time"
constant flagVestingEnd (line 25) | flagVestingEnd = "vesting-end-time"
constant flagVestingAmt (line 26) | flagVestingAmt = "vesting-amount"
function AddGenesisAccountCmd (line 30) | func AddGenesisAccountCmd(defaultNodeHome string) *cobra.Command {
FILE: cmd/iris/cmd/genesis.go
constant testnetFile (line 22) | testnetFile = "testnet-genesis-file"
constant mainnetFile (line 23) | mainnetFile = "mainnet-genesis-file"
constant outputFile (line 24) | outputFile = "output-genesis-file"
function mergeGenesisCmd (line 29) | func mergeGenesisCmd(encodingConfig params.EncodingConfig) *cobra.Command {
function merge (line 68) | func merge(cdc codec.Codec, testnet, mainnet *types.GenesisDoc, output s...
function mergeBank (line 107) | func mergeBank(cdc codec.Codec, testnet, mainnet map[string]json.RawMess...
function mergeAuth (line 129) | func mergeAuth(cdc codec.Codec, testnet, mainnet map[string]json.RawMess...
function mergeGov (line 140) | func mergeGov(cdc codec.Codec, testnet, mainnet map[string]json.RawMessa...
FILE: cmd/iris/cmd/keys.go
function Commands (line 26) | func Commands(defaultNodeHome string) *cobra.Command {
function importKeyCommand (line 91) | func importKeyCommand() *cobra.Command {
function getArmor (line 123) | func getArmor(privBytes []byte, passphrase string) (string, error) {
function runAddCmd (line 130) | func runAddCmd(cmd *cobra.Command, args []string) error {
FILE: cmd/iris/cmd/root.go
function NewRootCmd (line 46) | func NewRootCmd() *cobra.Command {
function enrichAutoCliOpts (line 119) | func enrichAutoCliOpts(autoCliOpts autocli.AppOptions, clientCtx client....
function initTendermintConfig (line 131) | func initTendermintConfig() *tmcfg.Config {
function initAppConfig (line 143) | func initAppConfig() (string, interface{}) {
function initRootCmd (line 156) | func initRootCmd(
function genesisCommand (line 192) | func genesisCommand(basicManager module.BasicManager, encodingConfig par...
function addModuleInitFlags (line 205) | func addModuleInitFlags(rootCmd *cobra.Command) {
function queryCommand (line 209) | func queryCommand() *cobra.Command {
function txCommand (line 233) | func txCommand(basicManager module.BasicManager) *cobra.Command {
type appCreator (line 262) | type appCreator struct
method newApp (line 264) | func (ac appCreator) newApp(
method appExport (line 282) | func (ac appCreator) appExport(
FILE: cmd/iris/cmd/testnet.go
constant nativeIrisMinUnit (line 62) | nativeIrisMinUnit = "uiris"
function testnetCmd (line 67) | func testnetCmd(
constant nodeDirPerm (line 139) | nodeDirPerm = 0755
function InitTestnet (line 142) | func InitTestnet(
function initGenFiles (line 328) | func initGenFiles(
function collectGenFiles (line 415) | func collectGenFiles(
function getIP (line 478) | func getIP(i int, startingIPAddr string) (ip string, err error) {
function calculateIP (line 489) | func calculateIP(ip string, i int) (string, error) {
function writeFile (line 502) | func writeFile(name string, dir string, contents []byte) error {
FILE: cmd/iris/cmd/util.go
constant formatJSON (line 27) | formatJSON = "json"
constant cmdScopeGlobal (line 28) | cmdScopeGlobal = "global"
constant filedTypeMap (line 29) | filedTypeMap = "map"
constant filedTypeArray (line 30) | filedTypeArray = "array"
type field (line 60) | type field struct
type command (line 66) | type command struct
method append (line 72) | func (c command) append(name, typ string, index int) command {
type coinConverter (line 81) | type coinConverter struct
method key (line 95) | func (it *coinConverter) key(parentCmd, cmd string) string {
method registerCmdWithArgs (line 99) | func (it *coinConverter) registerCmdWithArgs(parentCmd, cmd string, ar...
method registerGlobalFlag (line 112) | func (it *coinConverter) registerGlobalFlag(flagNm string) *coinConver...
method registerCmdWithFlag (line 125) | func (it *coinConverter) registerCmdWithFlag(parentCmd, cmd, flagNm st...
method registerCmdForResponse (line 138) | func (it *coinConverter) registerCmdForResponse(
method registerCmdForResponses (line 155) | func (it *coinConverter) registerCmdForResponses(
method hasFromFlag (line 175) | func (it coinConverter) hasFromFlag(cmdNm, flagNm string) bool {
method getFromArgs (line 186) | func (it coinConverter) getFromArgs(cmdNm string) (field, bool) {
method getFields (line 198) | func (it coinConverter) getFields(cmdNm string) map[string]field {
method handlePreRun (line 206) | func (it *coinConverter) handlePreRun(cmd *cobra.Command, args []strin...
method handlePostRun (line 229) | func (it *coinConverter) handlePostRun(cmd *cobra.Command) {
method parseFlags (line 241) | func (it coinConverter) parseFlags(cmd *cobra.Command, flag *pflag.Fla...
method parseArgs (line 250) | func (it coinConverter) parseArgs(cmd *cobra.Command, args []string) {
method parseYAML (line 269) | func (it coinConverter) parseYAML(cmd *cobra.Command, in []byte) string {
method resolvePath (line 293) | func (it coinConverter) resolvePath(cfg *config.Config, path string) (...
method queryToken (line 315) | func (it *coinConverter) queryToken(
method isOutputYAML (line 351) | func (it *coinConverter) isOutputYAML(cmd *cobra.Command) bool {
method handleList (line 364) | func (it *coinConverter) handleList(cmd *cobra.Command, cfg *config.Co...
method handleMap (line 374) | func (it *coinConverter) handleMap(cmd *cobra.Command, cfg *config.Con...
method convertCoins (line 398) | func (it *coinConverter) convertCoins(
method convertToMinCoin (line 418) | func (it *coinConverter) convertToMinCoin(
method convertToMainCoin (line 429) | func (it *coinConverter) convertToMainCoin(
method parseCoins (line 440) | func (it *coinConverter) parseCoins(srcCoinsStr string) (sdk.DecCoins,...
function NewConverter (line 88) | func NewConverter() *coinConverter {
FILE: cmd/iris/main.go
function main (line 13) | func main() {
FILE: crypto/keyring/options.go
function Option (line 20) | func Option() keyring.Option {
FILE: docs/.vuepress/client.js
method enhance (line 1) | enhance({app, router, siteData}) {
}
FILE: docs/.vuepress/enhanceApp.js
method install (line 5) | install (Vue) {
FILE: modules/evm/eip1559.go
method burnBaseFee (line 12) | func (k *Keeper) burnBaseFee(ctx sdk.Context, gasUsed uint64, baseFee *b...
FILE: modules/evm/keeper.go
type Keeper (line 22) | type Keeper struct
method EthereumTx (line 33) | func (k *Keeper) EthereumTx(
method UpdateParams (line 146) | func (k *Keeper) UpdateParams(
FILE: modules/evm/moudle.go
type AppModule (line 18) | type AppModule struct
method RegisterServices (line 40) | func (am AppModule) RegisterServices(cfg module.Configurator) {
function NewAppModule (line 25) | func NewAppModule(
FILE: modules/evm/state_transition.go
method ApplyTransaction (line 40) | func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transact...
method RefundGas (line 171) | func (k *Keeper) RefundGas(ctx sdk.Context, msg core.Message, leftoverGa...
FILE: modules/evm/types.go
constant EventEIP1559Burnt (line 4) | EventEIP1559Burnt = "eip1559_burnt"
constant AttributeKeyBaseFee (line 6) | AttributeKeyBaseFee = "base_fee"
constant AttributeKeyBurntFee (line 7) | AttributeKeyBurntFee = "burnt_fee"
FILE: modules/guardian/client/cli/cli_test.go
type IntegrationTestSuite (line 30) | type IntegrationTestSuite struct
method SetupSuite (line 37) | func (s *IntegrationTestSuite) SetupSuite() {
method TearDownSuite (line 61) | func (s *IntegrationTestSuite) TearDownSuite() {
method TestGuardian (line 70) | func (s *IntegrationTestSuite) TestGuardian() {
function TestIntegrationTestSuite (line 66) | func TestIntegrationTestSuite(t *testing.T) {
FILE: modules/guardian/client/cli/flags.go
constant FlagAddress (line 9) | FlagAddress = "address"
constant FlagDescription (line 10) | FlagDescription = "description"
function init (line 19) | func init() {
FILE: modules/guardian/client/cli/query.go
function GetQueryCmd (line 17) | func GetQueryCmd() *cobra.Command {
function GetCmdQuerySupers (line 32) | func GetCmdQuerySupers() *cobra.Command {
FILE: modules/guardian/client/cli/tx.go
function NewTxCmd (line 17) | func NewTxCmd() *cobra.Command {
function GetCmdCreateSuper (line 33) | func GetCmdCreateSuper() *cobra.Command {
function GetCmdDeleteSuper (line 74) | func GetCmdDeleteSuper() *cobra.Command {
FILE: modules/guardian/client/testutil/test_helpers.go
function CreateSuperExec (line 21) | func CreateSuperExec(
function DeleteSuperExec (line 37) | func DeleteSuperExec(
function QuerySupersExec (line 53) | func QuerySupersExec(clientCtx client.Context, extraArgs ...string) (tes...
FILE: modules/guardian/genesis.go
function InitGenesis (line 13) | func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data types.Genes...
function ExportGenesis (line 24) | func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
function ValidateGenesis (line 39) | func ValidateGenesis(data types.GenesisState) error {
FILE: modules/guardian/genesis_test.go
type TestSuite (line 19) | type TestSuite struct
method SetupTest (line 27) | func (suite *TestSuite) SetupTest() {
method TestExportGenesis (line 39) | func (suite *TestSuite) TestExportGenesis() {
function TestGenesisSuite (line 35) | func TestGenesisSuite(t *testing.T) {
FILE: modules/guardian/handler.go
function NewHandler (line 13) | func NewHandler(k keeper.Keeper) func(ctx sdk.Context, msg sdk.Msg) (*sd...
FILE: modules/guardian/keeper/grpc_query.go
method Supers (line 18) | func (k Keeper) Supers(c context.Context, req *types.QuerySupersRequest)...
FILE: modules/guardian/keeper/grpc_query_test.go
method TestGRPCQuerySupers (line 12) | func (suite *KeeperTestSuite) TestGRPCQuerySupers() {
FILE: modules/guardian/keeper/keeper.go
type Keeper (line 16) | type Keeper struct
method Logger (line 31) | func (k Keeper) Logger(ctx sdk.Context) log.Logger {
method AddSuper (line 36) | func (k Keeper) AddSuper(ctx sdk.Context, super types.Super) {
method DeleteSuper (line 44) | func (k Keeper) DeleteSuper(ctx sdk.Context, address sdk.AccAddress) {
method GetSuper (line 50) | func (k Keeper) GetSuper(ctx sdk.Context, addr sdk.AccAddress) (super ...
method IterateSupers (line 60) | func (k Keeper) IterateSupers(
method Authorized (line 79) | func (k Keeper) Authorized(c context.Context, addr sdk.AccAddress) bool {
function NewKeeper (line 22) | func NewKeeper(cdc codec.Codec, key storetypes.StoreKey) Keeper {
FILE: modules/guardian/keeper/keeper_test.go
type KeeperTestSuite (line 35) | type KeeperTestSuite struct
method SetupTest (line 44) | func (suite *KeeperTestSuite) SetupTest() {
method TestAddSuper (line 57) | func (suite *KeeperTestSuite) TestAddSuper() {
method TestDeleteSuper (line 78) | func (suite *KeeperTestSuite) TestDeleteSuper() {
function TestKeeperTestSuite (line 53) | func TestKeeperTestSuite(t *testing.T) {
function newPubKey (line 93) | func newPubKey(pk string) (res cryptotypes.PubKey) {
FILE: modules/guardian/keeper/msg_service.go
type msgServer (line 12) | type msgServer struct
method AddSuper (line 23) | func (m msgServer) AddSuper(goCtx context.Context, msg *types.MsgAddSu...
method DeleteSuper (line 59) | func (m msgServer) DeleteSuper(goCtx context.Context, msg *types.MsgDe...
function NewMsgServerImpl (line 19) | func NewMsgServerImpl(keeper Keeper) types.MsgServer {
FILE: modules/guardian/module.go
type AppModuleBasic (line 33) | type AppModuleBasic struct
method Name (line 38) | func (AppModuleBasic) Name() string { return types.ModuleName }
method RegisterLegacyAminoCodec (line 41) | func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
method DefaultGenesis (line 47) | func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMess...
method ValidateGenesis (line 52) | func (AppModuleBasic) ValidateGenesis(
method RegisterRESTRoutes (line 66) | func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr...
method RegisterGRPCGatewayRoutes (line 70) | func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Conte...
method GetTxCmd (line 75) | func (AppModuleBasic) GetTxCmd() *cobra.Command {
method GetQueryCmd (line 80) | func (AppModuleBasic) GetQueryCmd() *cobra.Command {
method RegisterInterfaces (line 85) | func (AppModuleBasic) RegisterInterfaces(registry codectypes.Interface...
type AppModule (line 92) | type AppModule struct
method IsOnePerModuleType (line 98) | func (am AppModule) IsOnePerModuleType() {}
method IsAppModule (line 100) | func (am AppModule) IsAppModule() {}
method Name (line 111) | func (AppModule) Name() string { return types.ModuleName }
method RegisterServices (line 114) | func (am AppModule) RegisterServices(cfg module.Configurator) {
method RegisterInvariants (line 120) | func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {
method QuerierRoute (line 124) | func (AppModule) QuerierRoute() string { return types.RouterKey }
method InitGenesis (line 128) | func (am AppModule) InitGenesis(
method ExportGenesis (line 143) | func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec...
method ConsensusVersion (line 152) | func (am AppModule) ConsensusVersion() uint64 {
method BeginBlock (line 157) | func (AppModule) BeginBlock(_ context.Context) error { return nil }
method EndBlock (line 161) | func (AppModule) EndBlock(_ context.Context) error {
method GenerateGenesisState (line 170) | func (AppModule) GenerateGenesisState(simState *module.SimulationState) {
method RegisterStoreDecoder (line 174) | func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegi...
method WeightedOperations (line 178) | func (am AppModule) WeightedOperations(
function NewAppModule (line 103) | func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule {
FILE: modules/guardian/types/codec.go
function RegisterLegacyAminoCodec (line 13) | func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
function RegisterInterfaces (line 18) | func RegisterInterfaces(registry types.InterfaceRegistry) {
function init (line 31) | func init() {
FILE: modules/guardian/types/event.go
constant EventTypeAddSuper (line 6) | EventTypeAddSuper = "add_super"
constant EventTypeDeleteSuper (line 7) | EventTypeDeleteSuper = "delete_super"
constant AttributeKeySuperAddress (line 9) | AttributeKeySuperAddress = "address"
constant AttributeKeyAddedBy (line 10) | AttributeKeyAddedBy = "added_by"
constant AttributeKeyDeletedBy (line 11) | AttributeKeyDeletedBy = "deleted_by"
constant AttributeValueCategory (line 13) | AttributeValueCategory = ModuleName
FILE: modules/guardian/types/genesis.go
function NewGenesisState (line 4) | func NewGenesisState(supers []Super) *GenesisState {
function DefaultGenesisState (line 11) | func DefaultGenesisState() *GenesisState {
FILE: modules/guardian/types/genesis.pb.go
constant _ (line 24) | _ = proto.GoGoProtoPackageIsVersion3
type GenesisState (line 27) | type GenesisState struct
method Reset (line 31) | func (m *GenesisState) Reset() { *m = GenesisState{} }
method String (line 32) | func (m *GenesisState) String() string { return proto.CompactTextStrin...
method ProtoMessage (line 33) | func (*GenesisState) ProtoMessage() {}
method Descriptor (line 34) | func (*GenesisState) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 37) | func (m *GenesisState) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 40) | func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]by...
method XXX_Merge (line 52) | func (m *GenesisState) XXX_Merge(src proto.Message) {
method XXX_Size (line 55) | func (m *GenesisState) XXX_Size() int {
method XXX_DiscardUnknown (line 58) | func (m *GenesisState) XXX_DiscardUnknown() {
method GetSupers (line 64) | func (m *GenesisState) GetSupers() []Super {
method Marshal (line 94) | func (m *GenesisState) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 104) | func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 109) | func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 142) | func (m *GenesisState) Size() (n int) {
method Unmarshal (line 163) | func (m *GenesisState) Unmarshal(dAtA []byte) error {
function init (line 71) | func init() {
function init (line 75) | func init() { proto.RegisterFile("irishub/guardian/genesis.proto", fileD...
function encodeVarintGenesis (line 131) | func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {
function sovGenesis (line 157) | func sovGenesis(x uint64) (n int) {
function sozGenesis (line 160) | func sozGenesis(x uint64) (n int) {
function skipGenesis (line 247) | func skipGenesis(dAtA []byte) (n int, err error) {
FILE: modules/guardian/types/guardian.pb.go
constant _ (line 24) | _ = proto.GoGoProtoPackageIsVersion3
type AccountType (line 27) | type AccountType
method String (line 46) | func (x AccountType) String() string {
method EnumDescriptor (line 50) | func (AccountType) EnumDescriptor() ([]byte, []int) {
constant Genesis (line 31) | Genesis AccountType = 0
constant Ordinary (line 33) | Ordinary AccountType = 1
type Super (line 55) | type Super struct
method Reset (line 62) | func (m *Super) Reset() { *m = Super{} }
method String (line 63) | func (m *Super) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 64) | func (*Super) ProtoMessage() {}
method Descriptor (line 65) | func (*Super) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 68) | func (m *Super) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 71) | func (m *Super) XXX_Marshal(b []byte, deterministic bool) ([]byte, err...
method XXX_Merge (line 83) | func (m *Super) XXX_Merge(src proto.Message) {
method XXX_Size (line 86) | func (m *Super) XXX_Size() int {
method XXX_DiscardUnknown (line 89) | func (m *Super) XXX_DiscardUnknown() {
method GetDescription (line 95) | func (m *Super) GetDescription() string {
method GetAccountType (line 102) | func (m *Super) GetAccountType() AccountType {
method GetAddress (line 109) | func (m *Super) GetAddress() string {
method GetAddedBy (line 116) | func (m *Super) GetAddedBy() string {
method Marshal (line 155) | func (m *Super) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 165) | func (m *Super) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 170) | func (m *Super) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 215) | func (m *Super) Size() (n int) {
method Unmarshal (line 245) | func (m *Super) Unmarshal(dAtA []byte) error {
function init (line 123) | func init() {
function init (line 128) | func init() { proto.RegisterFile("irishub/guardian/guardian.proto", file...
function encodeVarintGuardian (line 204) | func encodeVarintGuardian(dAtA []byte, offset int, v uint64) int {
function sovGuardian (line 239) | func sovGuardian(x uint64) (n int) {
function sozGuardian (line 242) | func sozGuardian(x uint64) (n int) {
function skipGuardian (line 410) | func skipGuardian(dAtA []byte) (n int, err error) {
FILE: modules/guardian/types/keys.go
constant ModuleName (line 10) | ModuleName = "guardian"
constant StoreKey (line 13) | StoreKey = ModuleName
constant RouterKey (line 16) | RouterKey = ModuleName
constant QuerierRoute (line 19) | QuerierRoute = StoreKey
constant QuerySupers (line 22) | QuerySupers = "supers"
function GetSuperKey (line 30) | func GetSuperKey(addr sdk.AccAddress) []byte {
function GetSupersSubspaceKey (line 35) | func GetSupersSubspaceKey() []byte {
FILE: modules/guardian/types/msgs.go
constant TypeMsgAddSuper (line 10) | TypeMsgAddSuper = "add_super"
constant TypeMsgDeleteSuper (line 11) | TypeMsgDeleteSuper = "delete_super"
function NewMsgAddSuper (line 20) | func NewMsgAddSuper(description string, address, addedBy sdk.AccAddress)...
method Route (line 29) | func (msg MsgAddSuper) Route() string { return RouterKey }
method Type (line 32) | func (msg MsgAddSuper) Type() string { return TypeMsgAddSuper }
method GetSignBytes (line 35) | func (msg MsgAddSuper) GetSignBytes() []byte {
method ValidateBasic (line 44) | func (msg MsgAddSuper) ValidateBasic() error {
method GetSigners (line 61) | func (msg MsgAddSuper) GetSigners() []sdk.AccAddress {
function NewMsgDeleteSuper (line 72) | func NewMsgDeleteSuper(address, deletedBy sdk.AccAddress) *MsgDeleteSuper {
method Route (line 80) | func (msg MsgDeleteSuper) Route() string { return RouterKey }
method Type (line 83) | func (msg MsgDeleteSuper) Type() string { return TypeMsgDeleteSuper }
method GetSignBytes (line 86) | func (msg MsgDeleteSuper) GetSignBytes() []byte {
method ValidateBasic (line 95) | func (msg MsgDeleteSuper) ValidateBasic() error {
method GetSigners (line 106) | func (msg MsgDeleteSuper) GetSigners() []sdk.AccAddress {
method EnsureLength (line 115) | func (msg MsgAddSuper) EnsureLength() error {
FILE: modules/guardian/types/msgs_test.go
function TestNewMsgAddSuper (line 30) | func TestNewMsgAddSuper(t *testing.T) {
function TestMsgAddSuperRoute (line 37) | func TestMsgAddSuperRoute(t *testing.T) {
function TestMsgAddSuperType (line 42) | func TestMsgAddSuperType(t *testing.T) {
function TestMsgAddSuperGetSignBytes (line 47) | func TestMsgAddSuperGetSignBytes(t *testing.T) {
function TestMsgAddSuperGetSigners (line 54) | func TestMsgAddSuperGetSigners(t *testing.T) {
function TestMsgAddSuperValidation (line 62) | func TestMsgAddSuperValidation(t *testing.T) {
function TestNewMsgDeleteSuper (line 90) | func TestNewMsgDeleteSuper(t *testing.T) {
function TestMsgDeleteSuperRoute (line 96) | func TestMsgDeleteSuperRoute(t *testing.T) {
function TestMsgDeleteSuperType (line 101) | func TestMsgDeleteSuperType(t *testing.T) {
function TestMsgDeleteSuperGetSignBytes (line 106) | func TestMsgDeleteSuperGetSignBytes(t *testing.T) {
function TestMsgDeleteSuperGetSigners (line 113) | func TestMsgDeleteSuperGetSigners(t *testing.T) {
function TestMsgDeleteSuperValidation (line 121) | func TestMsgDeleteSuperValidation(t *testing.T) {
FILE: modules/guardian/types/query.pb.go
constant _ (line 31) | _ = proto.GoGoProtoPackageIsVersion3
type QuerySupersRequest (line 34) | type QuerySupersRequest struct
method Reset (line 39) | func (m *QuerySupersRequest) Reset() { *m = QuerySupersRequest...
method String (line 40) | func (m *QuerySupersRequest) String() string { return proto.CompactTex...
method ProtoMessage (line 41) | func (*QuerySupersRequest) ProtoMessage() {}
method Descriptor (line 42) | func (*QuerySupersRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 45) | func (m *QuerySupersRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 48) | func (m *QuerySupersRequest) XXX_Marshal(b []byte, deterministic bool)...
method XXX_Merge (line 60) | func (m *QuerySupersRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 63) | func (m *QuerySupersRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 66) | func (m *QuerySupersRequest) XXX_DiscardUnknown() {
method GetPagination (line 72) | func (m *QuerySupersRequest) GetPagination() *query.PageRequest {
method Marshal (line 248) | func (m *QuerySupersRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 258) | func (m *QuerySupersRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 263) | func (m *QuerySupersRequest) MarshalToSizedBuffer(dAtA []byte) (int, e...
method Size (line 343) | func (m *QuerySupersRequest) Size() (n int) {
method Unmarshal (line 381) | func (m *QuerySupersRequest) Unmarshal(dAtA []byte) error {
type QuerySupersResponse (line 80) | type QuerySupersResponse struct
method Reset (line 85) | func (m *QuerySupersResponse) Reset() { *m = QuerySupersRespon...
method String (line 86) | func (m *QuerySupersResponse) String() string { return proto.CompactTe...
method ProtoMessage (line 87) | func (*QuerySupersResponse) ProtoMessage() {}
method Descriptor (line 88) | func (*QuerySupersResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 91) | func (m *QuerySupersResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 94) | func (m *QuerySupersResponse) XXX_Marshal(b []byte, deterministic bool...
method XXX_Merge (line 106) | func (m *QuerySupersResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 109) | func (m *QuerySupersResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 112) | func (m *QuerySupersResponse) XXX_DiscardUnknown() {
method GetSupers (line 118) | func (m *QuerySupersResponse) GetSupers() []Super {
method GetPagination (line 125) | func (m *QuerySupersResponse) GetPagination() *query.PageResponse {
method Marshal (line 283) | func (m *QuerySupersResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 293) | func (m *QuerySupersResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 298) | func (m *QuerySupersResponse) MarshalToSizedBuffer(dAtA []byte) (int, ...
method Size (line 356) | func (m *QuerySupersResponse) Size() (n int) {
method Unmarshal (line 467) | func (m *QuerySupersResponse) Unmarshal(dAtA []byte) error {
function init (line 132) | func init() {
function init (line 137) | func init() { proto.RegisterFile("irishub/guardian/query.proto", fileDes...
constant _ (line 172) | _ = grpc.SupportPackageIsVersion4
type QueryClient (line 177) | type QueryClient interface
type queryClient (line 182) | type queryClient struct
method Supers (line 190) | func (c *queryClient) Supers(ctx context.Context, in *QuerySupersReque...
function NewQueryClient (line 186) | func NewQueryClient(cc grpc1.ClientConn) QueryClient {
type QueryServer (line 200) | type QueryServer interface
type UnimplementedQueryServer (line 206) | type UnimplementedQueryServer struct
method Supers (line 209) | func (*UnimplementedQueryServer) Supers(ctx context.Context, req *Quer...
function RegisterQueryServer (line 213) | func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
function _Query_Supers_Handler (line 217) | func _Query_Supers_Handler(srv interface{}, ctx context.Context, dec fun...
function encodeVarintQuery (line 332) | func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
function sovQuery (line 375) | func sovQuery(x uint64) (n int) {
function sozQuery (line 378) | func sozQuery(x uint64) (n int) {
function skipQuery (line 587) | func skipQuery(dAtA []byte) (n int, err error) {
FILE: modules/guardian/types/query.pb.gw.go
function request_Query_Supers_0 (line 40) | func request_Query_Supers_0(ctx context.Context, marshaler runtime.Marsh...
function local_request_Query_Supers_0 (line 56) | func local_request_Query_Supers_0(ctx context.Context, marshaler runtime...
function RegisterQueryHandlerServer (line 76) | func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeM...
function RegisterQueryHandlerFromEndpoint (line 106) | func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime....
function RegisterQueryHandler (line 131) | func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, co...
function RegisterQueryHandlerClient (line 140) | func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeM...
FILE: modules/guardian/types/tx.pb.go
constant _ (line 30) | _ = proto.GoGoProtoPackageIsVersion3
type MsgAddSuper (line 33) | type MsgAddSuper struct
method Reset (line 39) | func (m *MsgAddSuper) Reset() { *m = MsgAddSuper{} }
method String (line 40) | func (m *MsgAddSuper) String() string { return proto.CompactTextString...
method ProtoMessage (line 41) | func (*MsgAddSuper) ProtoMessage() {}
method Descriptor (line 42) | func (*MsgAddSuper) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 45) | func (m *MsgAddSuper) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 48) | func (m *MsgAddSuper) XXX_Marshal(b []byte, deterministic bool) ([]byt...
method XXX_Merge (line 60) | func (m *MsgAddSuper) XXX_Merge(src proto.Message) {
method XXX_Size (line 63) | func (m *MsgAddSuper) XXX_Size() int {
method XXX_DiscardUnknown (line 66) | func (m *MsgAddSuper) XXX_DiscardUnknown() {
method GetDescription (line 72) | func (m *MsgAddSuper) GetDescription() string {
method GetAddress (line 79) | func (m *MsgAddSuper) GetAddress() string {
method GetAddedBy (line 86) | func (m *MsgAddSuper) GetAddedBy() string {
method Marshal (line 377) | func (m *MsgAddSuper) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 387) | func (m *MsgAddSuper) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 392) | func (m *MsgAddSuper) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 515) | func (m *MsgAddSuper) Size() (n int) {
method Unmarshal (line 577) | func (m *MsgAddSuper) Unmarshal(dAtA []byte) error {
type MsgAddSuperResponse (line 94) | type MsgAddSuperResponse struct
method Reset (line 97) | func (m *MsgAddSuperResponse) Reset() { *m = MsgAddSuperRespon...
method String (line 98) | func (m *MsgAddSuperResponse) String() string { return proto.CompactTe...
method ProtoMessage (line 99) | func (*MsgAddSuperResponse) ProtoMessage() {}
method Descriptor (line 100) | func (*MsgAddSuperResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 103) | func (m *MsgAddSuperResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 106) | func (m *MsgAddSuperResponse) XXX_Marshal(b []byte, deterministic bool...
method XXX_Merge (line 118) | func (m *MsgAddSuperResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 121) | func (m *MsgAddSuperResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 124) | func (m *MsgAddSuperResponse) XXX_DiscardUnknown() {
method Marshal (line 421) | func (m *MsgAddSuperResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 431) | func (m *MsgAddSuperResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 436) | func (m *MsgAddSuperResponse) MarshalToSizedBuffer(dAtA []byte) (int, ...
method Size (line 536) | func (m *MsgAddSuperResponse) Size() (n int) {
method Unmarshal (line 723) | func (m *MsgAddSuperResponse) Unmarshal(dAtA []byte) error {
type MsgDeleteSuper (line 131) | type MsgDeleteSuper struct
method Reset (line 136) | func (m *MsgDeleteSuper) Reset() { *m = MsgDeleteSuper{} }
method String (line 137) | func (m *MsgDeleteSuper) String() string { return proto.CompactTextStr...
method ProtoMessage (line 138) | func (*MsgDeleteSuper) ProtoMessage() {}
method Descriptor (line 139) | func (*MsgDeleteSuper) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 142) | func (m *MsgDeleteSuper) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 145) | func (m *MsgDeleteSuper) XXX_Marshal(b []byte, deterministic bool) ([]...
method XXX_Merge (line 157) | func (m *MsgDeleteSuper) XXX_Merge(src proto.Message) {
method XXX_Size (line 160) | func (m *MsgDeleteSuper) XXX_Size() int {
method XXX_DiscardUnknown (line 163) | func (m *MsgDeleteSuper) XXX_DiscardUnknown() {
method GetAddress (line 169) | func (m *MsgDeleteSuper) GetAddress() string {
method GetDeletedBy (line 176) | func (m *MsgDeleteSuper) GetDeletedBy() string {
method Marshal (line 444) | func (m *MsgDeleteSuper) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 454) | func (m *MsgDeleteSuper) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 459) | func (m *MsgDeleteSuper) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 545) | func (m *MsgDeleteSuper) Size() (n int) {
method Unmarshal (line 773) | func (m *MsgDeleteSuper) Unmarshal(dAtA []byte) error {
type MsgDeleteSuperResponse (line 184) | type MsgDeleteSuperResponse struct
method Reset (line 187) | func (m *MsgDeleteSuperResponse) Reset() { *m = MsgDeleteSuper...
method String (line 188) | func (m *MsgDeleteSuperResponse) String() string { return proto.Compac...
method ProtoMessage (line 189) | func (*MsgDeleteSuperResponse) ProtoMessage() {}
method Descriptor (line 190) | func (*MsgDeleteSuperResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 193) | func (m *MsgDeleteSuperResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 196) | func (m *MsgDeleteSuperResponse) XXX_Marshal(b []byte, deterministic b...
method XXX_Merge (line 208) | func (m *MsgDeleteSuperResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 211) | func (m *MsgDeleteSuperResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 214) | func (m *MsgDeleteSuperResponse) XXX_DiscardUnknown() {
method Marshal (line 481) | func (m *MsgDeleteSuperResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 491) | func (m *MsgDeleteSuperResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 496) | func (m *MsgDeleteSuperResponse) MarshalToSizedBuffer(dAtA []byte) (in...
method Size (line 562) | func (m *MsgDeleteSuperResponse) Size() (n int) {
method Unmarshal (line 887) | func (m *MsgDeleteSuperResponse) Unmarshal(dAtA []byte) error {
function init (line 220) | func init() {
function init (line 227) | func init() { proto.RegisterFile("irishub/guardian/tx.proto", fileDescri...
constant _ (line 263) | _ = grpc.SupportPackageIsVersion4
type MsgClient (line 268) | type MsgClient interface
type msgClient (line 275) | type msgClient struct
method AddSuper (line 283) | func (c *msgClient) AddSuper(ctx context.Context, in *MsgAddSuper, opt...
method DeleteSuper (line 292) | func (c *msgClient) DeleteSuper(ctx context.Context, in *MsgDeleteSupe...
function NewMsgClient (line 279) | func NewMsgClient(cc grpc1.ClientConn) MsgClient {
type MsgServer (line 302) | type MsgServer interface
type UnimplementedMsgServer (line 310) | type UnimplementedMsgServer struct
method AddSuper (line 313) | func (*UnimplementedMsgServer) AddSuper(ctx context.Context, req *MsgA...
method DeleteSuper (line 316) | func (*UnimplementedMsgServer) DeleteSuper(ctx context.Context, req *M...
function RegisterMsgServer (line 320) | func RegisterMsgServer(s grpc1.Server, srv MsgServer) {
function _Msg_AddSuper_Handler (line 324) | func _Msg_AddSuper_Handler(srv interface{}, ctx context.Context, dec fun...
function _Msg_DeleteSuper_Handler (line 342) | func _Msg_DeleteSuper_Handler(srv interface{}, ctx context.Context, dec ...
function encodeVarintTx (line 504) | func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
function sovTx (line 571) | func sovTx(x uint64) (n int) {
function sozTx (line 574) | func sozTx(x uint64) (n int) {
function skipTx (line 937) | func skipTx(dAtA []byte) (n int, err error) {
FILE: modules/guardian/types/types.go
function NewSuper (line 12) | func NewSuper(description string, accountType AccountType, address, adde...
method Equal (line 22) | func (g Super) Equal(super Super) bool {
function AccountTypeFromString (line 30) | func AccountTypeFromString(str string) (AccountType, error) {
function ValidAccountType (line 42) | func ValidAccountType(option AccountType) bool {
method Marshal (line 51) | func (at AccountType) Marshal() ([]byte, error) {
method Unmarshal (line 56) | func (at *AccountType) Unmarshal(data []byte) error {
method Format (line 62) | func (at AccountType) Format(s fmt.State, verb rune) {
FILE: modules/internft/interface.go
type AccountKeeper (line 15) | type AccountKeeper interface
type InterNftKeeper (line 22) | type InterNftKeeper struct
type InterClass (line 30) | type InterClass struct
method GetID (line 44) | func (d InterClass) GetID() string { return d.ID }
method GetURI (line 45) | func (d InterClass) GetURI() string { return d.URI }
method GetData (line 46) | func (d InterClass) GetData() string { return d.Data }
type InterToken (line 36) | type InterToken struct
method GetClassID (line 47) | func (t InterToken) GetClassID() string { return t.ClassID }
method GetID (line 48) | func (t InterToken) GetID() string { return t.ID }
method GetURI (line 49) | func (t InterToken) GetURI() string { return t.URI }
method GetData (line 50) | func (t InterToken) GetData() string { return t.Data }
FILE: modules/internft/keeper.go
function NewInterNftKeeper (line 17) | func NewInterNftKeeper(cdc codec.Codec,
method CreateOrUpdateClass (line 31) | func (ik InterNftKeeper) CreateOrUpdateClass(ctx sdk.Context,
method Mint (line 70) | func (ik InterNftKeeper) Mint(ctx sdk.Context,
method Transfer (line 85) | func (ik InterNftKeeper) Transfer(
method GetClass (line 108) | func (ik InterNftKeeper) GetClass(ctx sdk.Context, classID string) (nftt...
method GetNFT (line 127) | func (ik InterNftKeeper) GetNFT(ctx sdk.Context, classID, tokenID string...
method Burn (line 146) | func (ik InterNftKeeper) Burn(ctx sdk.Context, classID string, tokenID s...
method GetOwner (line 151) | func (ik InterNftKeeper) GetOwner(ctx sdk.Context, classID string, token...
method HasClass (line 156) | func (ik InterNftKeeper) HasClass(ctx sdk.Context, classID string) bool {
method Logger (line 161) | func (ik InterNftKeeper) Logger(ctx sdk.Context) log.Logger {
FILE: modules/mint/abci.go
function BeginBlocker (line 11) | func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
FILE: modules/mint/abci_test.go
function TestBeginBlocker (line 20) | func TestBeginBlocker(t *testing.T) {
function createTestApp (line 34) | func createTestApp(t *testing.T, isCheckTx bool) (*apptestutil.AppWrappe...
FILE: modules/mint/client/cli/cli_test.go
type IntegrationTestSuite (line 16) | type IntegrationTestSuite struct
method SetupSuite (line 23) | func (s *IntegrationTestSuite) SetupSuite() {
method TearDownSuite (line 38) | func (s *IntegrationTestSuite) TearDownSuite() {
method TestMint (line 47) | func (s *IntegrationTestSuite) TestMint() {
function TestIntegrationTestSuite (line 43) | func TestIntegrationTestSuite(t *testing.T) {
FILE: modules/mint/client/cli/query.go
function GetQueryCmd (line 15) | func GetQueryCmd() *cobra.Command {
function GetCmdQueryParams (line 30) | func GetCmdQueryParams() *cobra.Command {
FILE: modules/mint/client/rest/query.go
function registerQueryRoutes (line 9) | func registerQueryRoutes(cliCtx client.Context, r *mux.Router) {
FILE: modules/mint/client/rest/rest.go
function RegisterHandlers (line 10) | func RegisterHandlers(cliCtx client.Context, r *mux.Router) {
FILE: modules/mint/client/testutil/test_helpers.go
function QueryParamsExec (line 15) | func QueryParamsExec(clientCtx client.Context, extraArgs ...string) (tes...
FILE: modules/mint/genesis.go
function InitGenesis (line 14) | func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data types.Genes...
function ExportGenesis (line 25) | func ExportGenesis(ctx sdk.Context, keeper keeper.Keeper) *types.Genesis...
function ValidateGenesis (line 33) | func ValidateGenesis(data types.GenesisState) error {
FILE: modules/mint/keeper/grpc_query.go
method Params (line 14) | func (k Keeper) Params(
FILE: modules/mint/keeper/grpc_query_test.go
method TestGRPCQueryPoolParameters (line 11) | func (suite *KeeperTestSuite) TestGRPCQueryPoolParameters() {
FILE: modules/mint/keeper/keeper.go
type Keeper (line 15) | type Keeper struct
method Logger (line 48) | func (k Keeper) Logger(ctx sdk.Context) log.Logger {
method GetMinter (line 55) | func (k Keeper) GetMinter(ctx sdk.Context) (minter types.Minter) {
method SetMinter (line 66) | func (k Keeper) SetMinter(ctx sdk.Context, minter types.Minter) {
method MintCoins (line 74) | func (k Keeper) MintCoins(ctx sdk.Context, newCoins sdk.Coins) error {
method AddCollectedFees (line 84) | func (k Keeper) AddCollectedFees(ctx sdk.Context, coins sdk.Coins) err...
function NewKeeper (line 24) | func NewKeeper(
FILE: modules/mint/keeper/keeper_test.go
type KeeperTestSuite (line 19) | type KeeperTestSuite struct
method SetupTest (line 26) | func (suite *KeeperTestSuite) SetupTest() {
method TestSetGetMinter (line 41) | func (suite *KeeperTestSuite) TestSetGetMinter() {
method TestSetGetParamSet (line 49) | func (suite *KeeperTestSuite) TestSetGetParamSet() {
method TestMintCoins (line 57) | func (suite *KeeperTestSuite) TestMintCoins() {
method TestAddCollectedFees (line 68) | func (suite *KeeperTestSuite) TestAddCollectedFees() {
function TestKeeperTestSuite (line 37) | func TestKeeperTestSuite(t *testing.T) {
FILE: modules/mint/keeper/migrations.go
type Migrator (line 11) | type Migrator struct
method Migrate1to2 (line 22) | func (m Migrator) Migrate1to2(ctx sdk.Context) error {
function NewMigrator (line 17) | func NewMigrator(k Keeper, legacySubspace types.Subspace) Migrator {
FILE: modules/mint/keeper/msg_server.go
type msgServer (line 13) | type msgServer struct
method UpdateParams (line 26) | func (m msgServer) UpdateParams(
function NewMsgServerImpl (line 21) | func NewMsgServerImpl(keeper Keeper) types.MsgServer {
FILE: modules/mint/keeper/params.go
method GetParams (line 10) | func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) {
method SetParams (line 22) | func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error {
FILE: modules/mint/migrations/v2/migrate.go
type MintKeeper (line 10) | type MintKeeper interface
function Migrate (line 15) | func Migrate(ctx sdk.Context, k MintKeeper, legacySubspace types.Subspac...
FILE: modules/mint/module.go
constant ConsensusVersion (line 27) | ConsensusVersion = 2
type AppModuleBasic (line 36) | type AppModuleBasic struct
method Name (line 41) | func (AppModuleBasic) Name() string { return types.ModuleName }
method RegisterLegacyAminoCodec (line 44) | func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
method DefaultGenesis (line 49) | func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMess...
method ValidateGenesis (line 54) | func (AppModuleBasic) ValidateGenesis(
method RegisterGRPCGatewayRoutes (line 68) | func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Conte...
method GetTxCmd (line 73) | func (AppModuleBasic) GetTxCmd() *cobra.Command {
method GetQueryCmd (line 78) | func (AppModuleBasic) GetQueryCmd() *cobra.Command {
method RegisterInterfaces (line 83) | func (AppModuleBasic) RegisterInterfaces(registry codectypes.Interface...
type AppModule (line 90) | type AppModule struct
method Name (line 111) | func (AppModule) Name() string { return types.ModuleName }
method RegisterServices (line 114) | func (am AppModule) RegisterServices(cfg module.Configurator) {
method RegisterInvariants (line 125) | func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {
method QuerierRoute (line 129) | func (AppModule) QuerierRoute() string { return types.RouterKey }
method ConsensusVersion (line 135) | func (am AppModule) ConsensusVersion() uint64 {
method InitGenesis (line 141) | func (am AppModule) InitGenesis(
method ExportGenesis (line 156) | func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec...
method BeginBlock (line 162) | func (am AppModule) BeginBlock(ctx context.Context) error {
method EndBlock (line 170) | func (AppModule) EndBlock(_ context.Context) error {
method GenerateGenesisState (line 179) | func (AppModule) GenerateGenesisState(simState *module.SimulationState) {
method RegisterStoreDecoder (line 183) | func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegi...
method WeightedOperations (line 188) | func (am AppModule) WeightedOperations(
method IsOnePerModuleType (line 195) | func (am AppModule) IsOnePerModuleType() {}
method IsAppModule (line 198) | func (am AppModule) IsAppModule() {}
function NewAppModule (line 98) | func NewAppModule(
FILE: modules/mint/simulation/decoder.go
function NewDecodeStore (line 15) | func NewDecodeStore(cdc codec.Codec) func(kvA, kvB kv.Pair) string {
FILE: modules/mint/simulation/decoder_test.go
function TestDecodeStore (line 19) | func TestDecodeStore(t *testing.T) {
FILE: modules/mint/simulation/genesis.go
constant Inflation (line 19) | Inflation = "inflation"
function GenInflation (line 23) | func GenInflation(r *rand.Rand) mathsdk.LegacyDec {
function RandomizedGenState (line 28) | func RandomizedGenState(simState *module.SimulationState) {
FILE: modules/mint/types/codec.go
function init (line 17) | func init() {
function RegisterInterfaces (line 22) | func RegisterInterfaces(registry types.InterfaceRegistry) {
FILE: modules/mint/types/events.go
constant EventTypeMint (line 6) | EventTypeMint = "mint"
constant AttributeKeyLastInflationTime (line 8) | AttributeKeyLastInflationTime = "last_inflation_time"
constant AttributeKeyInflationTime (line 9) | AttributeKeyInflationTime = "inflation_time"
constant AttributeKeyMintCoin (line 10) | AttributeKeyMintCoin = "mint_coin"
FILE: modules/mint/types/expected_keepers.go
type AccountKeeper (line 10) | type AccountKeeper interface
type BankKeeper (line 20) | type BankKeeper interface
type Subspace (line 36) | type Subspace interface
FILE: modules/mint/types/genesis.go
function NewGenesisState (line 4) | func NewGenesisState(minter Minter, params Params) *GenesisState {
function DefaultGenesisState (line 12) | func DefaultGenesisState() *GenesisState {
function ValidateGenesis (line 21) | func ValidateGenesis(data GenesisState) error {
FILE: modules/mint/types/genesis.pb.go
constant _ (line 24) | _ = proto.GoGoProtoPackageIsVersion3
type GenesisState (line 27) | type GenesisState struct
method Reset (line 32) | func (m *GenesisState) Reset() { *m = GenesisState{} }
method String (line 33) | func (m *GenesisState) String() string { return proto.CompactTextStrin...
method ProtoMessage (line 34) | func (*GenesisState) ProtoMessage() {}
method Descriptor (line 35) | func (*GenesisState) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 38) | func (m *GenesisState) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 41) | func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]by...
method XXX_Merge (line 53) | func (m *GenesisState) XXX_Merge(src proto.Message) {
method XXX_Size (line 56) | func (m *GenesisState) XXX_Size() int {
method XXX_DiscardUnknown (line 59) | func (m *GenesisState) XXX_DiscardUnknown() {
method GetMinter (line 65) | func (m *GenesisState) GetMinter() Minter {
method GetParams (line 72) | func (m *GenesisState) GetParams() Params {
method Marshal (line 103) | func (m *GenesisState) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 113) | func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 118) | func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 157) | func (m *GenesisState) Size() (n int) {
method Unmarshal (line 176) | func (m *GenesisState) Unmarshal(dAtA []byte) error {
function init (line 79) | func init() {
function init (line 83) | func init() { proto.RegisterFile("irishub/mint/genesis.proto", fileDescr...
function encodeVarintGenesis (line 146) | func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int {
function sovGenesis (line 170) | func sovGenesis(x uint64) (n int) {
function sozGenesis (line 173) | func sozGenesis(x uint64) (n int) {
function skipGenesis (line 292) | func skipGenesis(dAtA []byte) (n int, err error) {
FILE: modules/mint/types/keys.go
constant ModuleName (line 6) | ModuleName = "mint"
constant StoreKey (line 9) | StoreKey = ModuleName
constant RouterKey (line 12) | RouterKey = ModuleName
constant QuerierRoute (line 15) | QuerierRoute = ModuleName
constant QueryParameters (line 18) | QueryParameters = "parameters"
constant QueryInflation (line 19) | QueryInflation = "inflation"
FILE: modules/mint/types/mint.pb.go
constant _ (line 29) | _ = proto.GoGoProtoPackageIsVersion3
type Minter (line 32) | type Minter struct
method Reset (line 39) | func (m *Minter) Reset() { *m = Minter{} }
method String (line 40) | func (m *Minter) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 41) | func (*Minter) ProtoMessage() {}
method Descriptor (line 42) | func (*Minter) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 45) | func (m *Minter) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 48) | func (m *Minter) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 60) | func (m *Minter) XXX_Merge(src proto.Message) {
method XXX_Size (line 63) | func (m *Minter) XXX_Size() int {
method XXX_DiscardUnknown (line 66) | func (m *Minter) XXX_DiscardUnknown() {
method GetLastUpdate (line 72) | func (m *Minter) GetLastUpdate() time.Time {
method Marshal (line 160) | func (m *Minter) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 170) | func (m *Minter) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 175) | func (m *Minter) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 252) | func (m *Minter) Size() (n int) {
method Unmarshal (line 286) | func (m *Minter) Unmarshal(dAtA []byte) error {
type Params (line 80) | type Params struct
method Reset (line 87) | func (m *Params) Reset() { *m = Params{} }
method ProtoMessage (line 88) | func (*Params) ProtoMessage() {}
method Descriptor (line 89) | func (*Params) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 92) | func (m *Params) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 95) | func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 107) | func (m *Params) XXX_Merge(src proto.Message) {
method XXX_Size (line 110) | func (m *Params) XXX_Size() int {
method XXX_DiscardUnknown (line 113) | func (m *Params) XXX_DiscardUnknown() {
method GetMintDenom (line 119) | func (m *Params) GetMintDenom() string {
method Marshal (line 201) | func (m *Params) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 211) | func (m *Params) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 216) | func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
method Size (line 265) | func (m *Params) Size() (n int) {
method Unmarshal (line 403) | func (m *Params) Unmarshal(dAtA []byte) error {
function init (line 126) | func init() {
function init (line 131) | func init() { proto.RegisterFile("irishub/mint/mint.proto", fileDescript...
function encodeVarintMint (line 241) | func encodeVarintMint(dAtA []byte, offset int, v uint64) int {
function sovMint (line 280) | func sovMint(x uint64) (n int) {
function sozMint (line 283) | func sozMint(x uint64) (n int) {
function skipMint (line 519) | func skipMint(dAtA []byte) (n int, err error) {
FILE: modules/mint/types/minter.go
constant blocksPerYear (line 12) | blocksPerYear = 60 * 60 * 8766 / 5
function NewMinter (line 18) | func NewMinter(lastUpdate time.Time, inflationBase sdkmath.Int) Minter {
function DefaultMinter (line 26) | func DefaultMinter() Minter {
function ValidateMinter (line 34) | func ValidateMinter(m Minter) error {
method NextAnnualProvisions (line 45) | func (m Minter) NextAnnualProvisions(params Params) (provisions sdkmath....
method BlockProvision (line 50) | func (m Minter) BlockProvision(params Params) sdk.Coin {
FILE: modules/mint/types/minter_test.go
function TestNextInflation (line 13) | func TestNextInflation(t *testing.T) {
function TestDefaultMinter (line 28) | func TestDefaultMinter(t *testing.T) {
function TestMinterValidate (line 33) | func TestMinterValidate(t *testing.T) {
FILE: modules/mint/types/msg.go
method GetSignBytes (line 14) | func (m *MsgUpdateParams) GetSignBytes() []byte {
method ValidateBasic (line 20) | func (m *MsgUpdateParams) ValidateBasic() error {
method GetSigners (line 28) | func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress {
FILE: modules/mint/types/params.go
constant DefaultParamSpace (line 18) | DefaultParamSpace = "mint"
function ParamKeyTable (line 29) | func ParamKeyTable() paramtypes.KeyTable {
function NewParams (line 33) | func NewParams(mintDenom string, inflation math.LegacyDec) Params {
function DefaultParams (line 41) | func DefaultParams() Params {
method String (line 49) | func (p Params) String() string {
method ParamSetPairs (line 55) | func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
method GetParamSpace (line 63) | func (p *Params) GetParamSpace() string {
method Validate (line 68) | func (p Params) Validate() error {
function validateInflation (line 86) | func validateInflation(i interface{}) error {
function validateMintDenom (line 99) | func validateMintDenom(i interface{}) error {
FILE: modules/mint/types/query.pb.go
constant _ (line 31) | _ = proto.GoGoProtoPackageIsVersion3
type QueryParamsRequest (line 34) | type QueryParamsRequest struct
method Reset (line 37) | func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest...
method String (line 38) | func (m *QueryParamsRequest) String() string { return proto.CompactTex...
method ProtoMessage (line 39) | func (*QueryParamsRequest) ProtoMessage() {}
method Descriptor (line 40) | func (*QueryParamsRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 43) | func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 46) | func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool)...
method XXX_Merge (line 58) | func (m *QueryParamsRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 61) | func (m *QueryParamsRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 64) | func (m *QueryParamsRequest) XXX_DiscardUnknown() {
method Marshal (line 237) | func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 247) | func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 252) | func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, e...
method Size (line 316) | func (m *QueryParamsRequest) Size() (n int) {
method Unmarshal (line 346) | func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {
type QueryParamsResponse (line 71) | type QueryParamsResponse struct
method Reset (line 76) | func (m *QueryParamsResponse) Reset() { *m = QueryParamsRespon...
method String (line 77) | func (m *QueryParamsResponse) String() string { return proto.CompactTe...
method ProtoMessage (line 78) | func (*QueryParamsResponse) ProtoMessage() {}
method Descriptor (line 79) | func (*QueryParamsResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 82) | func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 85) | func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool...
method XXX_Merge (line 97) | func (m *QueryParamsResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 100) | func (m *QueryParamsResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 103) | func (m *QueryParamsResponse) XXX_DiscardUnknown() {
method GetParams (line 109) | func (m *QueryParamsResponse) GetParams() Params {
method GetRes (line 116) | func (m *QueryParamsResponse) GetRes() *query.PageResponse {
method Marshal (line 260) | func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 270) | func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 275) | func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, ...
method Size (line 325) | func (m *QueryParamsResponse) Size() (n int) {
method Unmarshal (line 396) | func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
function init (line 123) | func init() {
function init (line 128) | func init() { proto.RegisterFile("irishub/mint/query.proto", fileDescrip...
constant _ (line 161) | _ = grpc.SupportPackageIsVersion4
type QueryClient (line 166) | type QueryClient interface
type queryClient (line 171) | type queryClient struct
method Params (line 179) | func (c *queryClient) Params(ctx context.Context, in *QueryParamsReque...
function NewQueryClient (line 175) | func NewQueryClient(cc grpc1.ClientConn) QueryClient {
type QueryServer (line 189) | type QueryServer interface
type UnimplementedQueryServer (line 195) | type UnimplementedQueryServer struct
method Params (line 198) | func (*UnimplementedQueryServer) Params(ctx context.Context, req *Quer...
function RegisterQueryServer (line 202) | func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
function _Query_Params_Handler (line 206) | func _Query_Params_Handler(srv interface{}, ctx context.Context, dec fun...
function encodeVarintQuery (line 305) | func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
function sovQuery (line 340) | func sovQuery(x uint64) (n int) {
function sozQuery (line 343) | func sozQuery(x uint64) (n int) {
function skipQuery (line 515) | func skipQuery(dAtA []byte) (n int, err error) {
FILE: modules/mint/types/query.pb.gw.go
function request_Query_Params_0 (line 36) | func request_Query_Params_0(ctx context.Context, marshaler runtime.Marsh...
function local_request_Query_Params_0 (line 45) | func local_request_Query_Params_0(ctx context.Context, marshaler runtime...
function RegisterQueryHandlerServer (line 58) | func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeM...
function RegisterQueryHandlerFromEndpoint (line 88) | func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime....
function RegisterQueryHandler (line 113) | func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, co...
function RegisterQueryHandlerClient (line 122) | func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeM...
FILE: modules/mint/types/tx.pb.go
constant _ (line 31) | _ = proto.GoGoProtoPackageIsVersion3
type MsgUpdateParams (line 36) | type MsgUpdateParams struct
method Reset (line 46) | func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} }
method String (line 47) | func (m *MsgUpdateParams) String() string { return proto.CompactTextSt...
method ProtoMessage (line 48) | func (*MsgUpdateParams) ProtoMessage() {}
method Descriptor (line 49) | func (*MsgUpdateParams) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 52) | func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 55) | func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([...
method XXX_Merge (line 67) | func (m *MsgUpdateParams) XXX_Merge(src proto.Message) {
method XXX_Size (line 70) | func (m *MsgUpdateParams) XXX_Size() int {
method XXX_DiscardUnknown (line 73) | func (m *MsgUpdateParams) XXX_DiscardUnknown() {
method Marshal (line 239) | func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 249) | func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 254) | func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, erro...
method Size (line 313) | func (m *MsgUpdateParams) Size() (n int) {
method Unmarshal (line 343) | func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error {
type MsgUpdateParamsResponse (line 83) | type MsgUpdateParamsResponse struct
method Reset (line 86) | func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdatePara...
method String (line 87) | func (m *MsgUpdateParamsResponse) String() string { return proto.Compa...
method ProtoMessage (line 88) | func (*MsgUpdateParamsResponse) ProtoMessage() {}
method Descriptor (line 89) | func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 92) | func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 95) | func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 107) | func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 110) | func (m *MsgUpdateParamsResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 113) | func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() {
method Marshal (line 279) | func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) {
method MarshalTo (line 289) | func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) {
method MarshalToSizedBuffer (line 294) | func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (i...
method Size (line 328) | func (m *MsgUpdateParamsResponse) Size() (n int) {
method Unmarshal (line 458) | func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error {
function init (line 119) | func init() {
function init (line 124) | func init() { proto.RegisterFile("irishub/mint/tx.proto", fileDescriptor...
constant _ (line 157) | _ = grpc.SupportPackageIsVersion4
type MsgClient (line 162) | type MsgClient interface
type msgClient (line 170) | type msgClient struct
method UpdateParams (line 178) | func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdatePar...
function NewMsgClient (line 174) | func NewMsgClient(cc grpc1.ClientConn) MsgClient {
type MsgServer (line 188) | type MsgServer interface
type UnimplementedMsgServer (line 197) | type UnimplementedMsgServer struct
method UpdateParams (line 200) | func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *...
function RegisterMsgServer (line 204) | func RegisterMsgServer(s grpc1.Server, srv MsgServer) {
function _Msg_UpdateParams_Handler (line 208) | func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec...
function encodeVarintTx (line 302) | func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
function sovTx (line 337) | func sovTx(x uint64) (n int) {
function sozTx (line 340) | func sozTx(x uint64) (n int) {
function skipTx (line 508) | func skipTx(dAtA []byte) (n int, err error) {
FILE: testutil/app.go
type AppWrapper (line 21) | type AppWrapper struct
function setup (line 25) | func setup(
FILE: testutil/test_helpers.go
function CreateApp (line 43) | func CreateApp(t *testing.T) *AppWrapper {
function NewConfig (line 70) | func NewConfig() network.Config {
function CreateAppWithGenesisValSet (line 95) | func CreateAppWithGenesisValSet(
function genesisStateWithValSet (line 141) | func genesisStateWithValSet(codec codec.Codec, genesisState map[string]j...
type EmptyAppOptions (line 228) | type EmptyAppOptions struct
method Get (line 231) | func (ao EmptyAppOptions) Get(o string) interface{} {
function NewTestNetworkFixture (line 236) | func NewTestNetworkFixture() network.TestFixture {
function ExecCommand (line 268) | func ExecCommand(
function WaitForTx (line 288) | func WaitForTx(
FILE: types/address.go
constant Bech32ChainPrefix (line 8) | Bech32ChainPrefix = "i"
constant PrefixAcc (line 11) | PrefixAcc = "a"
constant PrefixValidator (line 14) | PrefixValidator = "v"
constant PrefixConsensus (line 17) | PrefixConsensus = "c"
constant PrefixPublic (line 20) | PrefixPublic = "p"
constant PrefixAddress (line 23) | PrefixAddress = "a"
constant Bech32PrefixAccAddr (line 26) | Bech32PrefixAccAddr = Bech32ChainPrefix + PrefixAcc + PrefixAddress
constant Bech32PrefixAccPub (line 28) | Bech32PrefixAccPub = Bech32ChainPrefix + PrefixAcc + PrefixPublic
constant Bech32PrefixValAddr (line 30) | Bech32PrefixValAddr = Bech32ChainPrefix + PrefixValidator + PrefixAddress
constant Bech32PrefixValPub (line 32) | Bech32PrefixValPub = Bech32ChainPrefix + PrefixValidator + PrefixPublic
constant Bech32PrefixConsAddr (line 34) | Bech32PrefixConsAddr = Bech32ChainPrefix + PrefixConsensus + PrefixAddress
constant Bech32PrefixConsPub (line 36) | Bech32PrefixConsPub = Bech32ChainPrefix + PrefixConsensus + PrefixPublic
function ConfigureBech32Prefix (line 39) | func ConfigureBech32Prefix() {
FILE: types/chain_id.go
function parseChainID (line 12) | func parseChainID(_ string) (*big.Int, error) {
FILE: types/genesis.go
type GenesisState (line 12) | type GenesisState
FILE: types/runtime.go
constant AppName (line 23) | AppName = "IrisApp"
function init (line 35) | func init() {
function InjectCodec (line 95) | func InjectCodec(legacyAmino *codec.LegacyAmino, interfaceRegistry types...
FILE: wrapper/farm.go
type farmGovHook (line 14) | type farmGovHook struct
method AfterProposalDeposit (line 28) | func (f farmGovHook) AfterProposalDeposit(c context.Context, proposalI...
method AfterProposalFailedMinDeposit (line 35) | func (f farmGovHook) AfterProposalFailedMinDeposit(c context.Context, ...
method AfterProposalSubmission (line 42) | func (f farmGovHook) AfterProposalSubmission(c context.Context, propos...
method AfterProposalVote (line 49) | func (f farmGovHook) AfterProposalVote(c context.Context, proposalID u...
method AfterProposalVotingPeriodEnded (line 56) | func (f farmGovHook) AfterProposalVotingPeriodEnded(c context.Context,...
function NewFarmGovHook (line 21) | func NewFarmGovHook(gh farmkeeper.GovHook) govtypes.GovHooks {
FILE: wrapper/token.go
function NewEVMKeeper (line 33) | func NewEVMKeeper(ek *evmkeeper.Keeper) tokentypes.EVMKeeper {
type evmKeeper (line 37) | type evmKeeper struct
method ApplyMessage (line 42) | func (e *evmKeeper) ApplyMessage(ctx sdk.Context, msg core.Message, tr...
method ChainID (line 57) | func (e *evmKeeper) ChainID() *big.Int {
method EstimateGas (line 62) | func (e *evmKeeper) EstimateGas(ctx context.Context, req *tokentypes.E...
method SupportedKey (line 76) | func (e *evmKeeper) SupportedKey(pubKey cryptotypes.PubKey) bool {
function NewICS20Keeper (line 93) | func NewICS20Keeper(ik ibctransferkeeper.Keeper) tokentypes.ICS20Keeper {
type ics20Keeper (line 97) | type ics20Keeper struct
method HasTrace (line 102) | func (i *ics20Keeper) HasTrace(ctx sdk.Context, denom string) bool {
Condensed preview — 274 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,851K chars).
[
{
"path": ".dockerignore",
"chars": 25,
"preview": "Dockerfile\nbuild/\nvendor/"
},
{
"path": ".gitattributes",
"chars": 35,
"preview": "lite/swagger-ui/* linguist-vendored"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 842,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: haifengxi\n\n---\n\n**Descri"
},
{
"path": ".github/ISSUE_TEMPLATE/custom.md",
"chars": 133,
"preview": "---\nname: Custom issue template\nabout: Describe this issue template's purpose here.\ntitle: ''\nlabels: ''\nassignees: haif"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 602,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: haifengxi\n\n---\n\n**Is y"
},
{
"path": ".github/ISSUE_TEMPLATE/release.md",
"chars": 244,
"preview": "---\nname: Release\nabout: Release a new version\ntitle: Release \"$(replace by version)\"\nlabels: release\nassignees: haifeng"
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 2462,
"preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
},
{
"path": ".github/workflows/deploy-docs.yml",
"chars": 2072,
"preview": "name: Build and Deploy Docs\n\non:\n push:\n branches: [ \"master\" ]\n paths: [ \"docs/**\" ]\n\njobs:\n setup-build-publis"
},
{
"path": ".github/workflows/publish-docker-image.yml",
"chars": 894,
"preview": "name: Build and Publish Docker Image\non:\n push:\n branches:\n - master\n tags:\n - \"v[0-9]+.[0-9]+.[0-9]+\" "
},
{
"path": ".github/workflows/releases.yml",
"chars": 762,
"preview": "name: Release\non:\n push:\n tags:\n - \"v[0-9]+.[0-9]+.[0-9]+\"\n \njobs:\n setup-build-publish:\n name: Setup, B"
},
{
"path": ".github/workflows/run-unit-tests.yml",
"chars": 362,
"preview": "name: Run Unit Tests\non: [pull_request]\n\njobs:\n test-unit:\n name: Run Unit Tests\n runs-on: ubuntu-latest\n step"
},
{
"path": ".gitignore",
"chars": 127,
"preview": "vendor\n.DS_Store\n.idea\n.vscode\nbuild/\n.out\ndocs/.vuepress/dist/\nnode_modules/\ndependency-graph.png\nmytestnet\nbuf-stamp\nt"
},
{
"path": ".golangci.yml",
"chars": 358,
"preview": "linters:\n disable-all: true\n enable:\n - errcheck\n - golint\n - ineffassign\n - unconvert\n - misspell\nlint"
},
{
"path": "CHANGELOG.md",
"chars": 45263,
"preview": "# Changelog\n\n## 3.1.0\n\n### State Machine Breaking\n\n* (IRISHub) [\\#2944](https://github.com/irisnet/irishub/pull/2944) Bu"
},
{
"path": "CONTRIBUTING.md",
"chars": 4449,
"preview": "# Contributing\n\nThank you for considering making contributions to irishub!\n\nContributing to this repo can mean many thin"
},
{
"path": "Dockerfile",
"chars": 585,
"preview": "#\n# Build image: docker build -t irisnet/irishub:v2.1.0 --build-arg EVM_CHAIN_ID=6688 .\n#\nFROM golang:1.22-alpine as bui"
},
{
"path": "LICENSE",
"chars": 11350,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 9164,
"preview": "#!/usr/bin/make -f\n\nPACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation')\nPACKAGES_UNITTEST=$(shell go list ./..."
},
{
"path": "README.md",
"chars": 1533,
"preview": "# IRIShub\n\n\n\n[ params.Encodin"
},
{
"path": "app/export.go",
"chars": 7958,
"preview": "package app\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tstoretyp"
},
{
"path": "app/keepers/keepers.go",
"chars": 24544,
"preview": "package keepers\n\nimport (\n\t\"github.com/spf13/cast\"\n\n\t\"cosmossdk.io/log\"\n\t\"cosmossdk.io/math\"\n\tstoretypes \"cosmossdk.io/s"
},
{
"path": "app/keepers/keys.go",
"chars": 5384,
"preview": "package keepers\n\nimport (\n\tstoretypes \"cosmossdk.io/store/types\"\n\tevidencetypes \"cosmossdk.io/x/evidence/types\"\n\t\"cosmos"
},
{
"path": "app/keepers/types.go",
"chars": 1733,
"preview": "package keepers\n\nimport (\n\t\"context\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tdistrkeeper \"github.com/cosmos/cosmos-s"
},
{
"path": "app/modules.go",
"chars": 17769,
"preview": "package app\n\nimport (\n\t\"cosmossdk.io/x/evidence\"\n\tevidencetypes \"cosmossdk.io/x/evidence/types\"\n\t\"cosmossdk.io/x/feegran"
},
{
"path": "app/params/encoding.go",
"chars": 489,
"preview": "package params\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmo"
},
{
"path": "app/params/params.go",
"chars": 107,
"preview": "package params\n\n// Simulation parameter constants\nconst (\n\tSimulationTest = \"simulation_test\"\n)\n"
},
{
"path": "app/params/proto.go",
"chars": 1613,
"preview": "package params\n\nimport (\n\t\"cosmossdk.io/x/tx/signing\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-s"
},
{
"path": "app/rpc/auth.go",
"chars": 3405,
"preview": "package rpc\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\t\"cosmossdk.i"
},
{
"path": "app/rpc/override.go",
"chars": 793,
"preview": "package rpc\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\tauthtypes \"git"
},
{
"path": "app/sim_bench_test.go",
"chars": 3982,
"preview": "package app\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tsimtestu"
},
{
"path": "app/sim_test.go",
"chars": 15628,
"preview": "package app\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"os\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"testing\"\n\n\tcapabilitytype"
},
{
"path": "app/upgrade.go",
"chars": 1646,
"preview": "package app\n\nimport (\n\t\"fmt\"\n\n\tupgradetypes \"cosmossdk.io/x/upgrade/types\"\n\n\t\"github.com/irisnet/irishub/v4/app/upgrades"
},
{
"path": "app/upgrades/types.go",
"chars": 2154,
"preview": "package upgrades\n\nimport (\n\ttmproto \"github.com/cometbft/cometbft/proto/tendermint/types\"\n\n\tstore \"cosmossdk.io/store/ty"
},
{
"path": "app/upgrades/v200/config.go",
"chars": 1150,
"preview": "package v200\n\nimport (\n\t\"cosmossdk.io/math\"\n\tetherminttypes \"github.com/evmos/ethermint/x/evm/types\"\n\tfeemarkettypes \"gi"
},
{
"path": "app/upgrades/v200/upgrades.go",
"chars": 2965,
"preview": "package v200\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"cosmossdk.io/store/prefix\"\n\tstoretypes \"cosmossdk.io/store/types\"\n\t\"cosmossd"
},
{
"path": "app/upgrades/v210/upgrades.go",
"chars": 1937,
"preview": "package v210\n\nimport (\n\t\"context\"\n\tstoretypes \"cosmossdk.io/store/types\"\n\tupgradetypes \"cosmossdk.io/x/upgrade/types\"\n\t\""
},
{
"path": "app/upgrades/v300/constants.go",
"chars": 1094,
"preview": "package v300\n\nimport (\n\t\"cosmossdk.io/math\"\n)\n\nvar (\n\t// ValidatorBondFactor dictates the cap on the liquid shares\n\t// f"
},
{
"path": "app/upgrades/v300/lsm.go",
"chars": 5358,
"preview": "package v300\n\nimport (\n\t\"context\"\n\t\"sort\"\n\n\t\"cosmossdk.io/math\"\n\tstoretypes \"cosmossdk.io/store/types\"\n\t\"github.com/cosm"
},
{
"path": "app/upgrades/v300/upgrades.go",
"chars": 3569,
"preview": "package v300\n\nimport (\n\t\"context\"\n\tstoretypes \"cosmossdk.io/store/types\"\n\tupgradetypes \"cosmossdk.io/x/upgrade/types\"\n\ts"
},
{
"path": "app/upgrades/v400/upgrades.go",
"chars": 911,
"preview": "package v400\n\nimport (\n\t\"context\"\n\n\tstoretypes \"cosmossdk.io/store/types\"\n\tupgradetypes \"cosmossdk.io/x/upgrade/types\"\n\t"
},
{
"path": "buf.gen.swagger.yaml",
"chars": 317,
"preview": "version: v1\n\nplugins:\n\n - name: gocosmos\n out: .\n opt:\n - plugins=grpc\n\n - name: grpc-gateway\n out: .\n "
},
{
"path": "buf.work.yaml",
"chars": 241,
"preview": "# Generated by \"buf config migrate-v1beta1\". Edit as necessary, and\n# remove this comment when you're finished.\n#\n# This"
},
{
"path": "client/keystore/keys.go",
"chars": 1312,
"preview": "package keystore\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\ttmcrypto \"github.com/cometbft/cometbft/crypto\"\n\t\"github.com/cometbf"
},
{
"path": "client/keystore/keys_test.go",
"chars": 755,
"preview": "package keystore\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestRecoveryAndExportPrivKeyArmor("
},
{
"path": "client/keystore/keystore.go",
"chars": 3255,
"preview": "package keystore\n\nimport (\n\t\"bytes\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\""
},
{
"path": "client/lite/config.json",
"chars": 9181,
"preview": "{\n \"swagger\": \"2.0\",\n \"info\": {\n \"title\": \"IRIShub - REST and gRPC Gateway docs\",\n \"description\": \"A REST interf"
},
{
"path": "client/lite/statik/statik.go",
"chars": 1962354,
"preview": "// Code generated by statik. DO NOT EDIT.\n\n// Package statik contains static assets.\npackage statik\n\nimport (\n\t\"github.c"
},
{
"path": "client/lite/swagger-ui/index.html",
"chars": 1336,
"preview": "<!-- HTML for static distribution bundle build -->\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n"
},
{
"path": "client/lite/swagger-ui/swagger-ui-bundle.js",
"chars": 1768479,
"preview": "! function(e, t) {\n \"object\" == typeof exports && \"object\" == typeof module ? module.exports = t() : \"function\" == ty"
},
{
"path": "client/lite/swagger-ui/swagger-ui-standalone-preset.js",
"chars": 558790,
"preview": "! function(t, e) {\n \"object\" == typeof exports && \"object\" == typeof module ? module.exports = e() : \"function\" == ty"
},
{
"path": "client/lite/swagger-ui/swagger-ui.css",
"chars": 153768,
"preview": ".swagger-ui{\n /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif;color:"
},
{
"path": "client/lite/swagger-ui/swagger.yaml",
"chars": 2998754,
"preview": "swagger: '2.0'\ninfo:\n title: IRIShub - REST and gRPC Gateway docs\n description: A REST interface for state queries, le"
},
{
"path": "client/lite/swagger.go",
"chars": 503,
"preview": "package lite\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/gorilla/mux\"\n\t\"github.com/rakyll/statik/fs\"\n\n\t\"github.com/cosmos/cosmos"
},
{
"path": "cmd/contract_tests/main.go",
"chars": 1350,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/snikch/goodman/hooks\"\n\t\"github.com/snikch/goodman/transaction\"\n)\n\nfunc main("
},
{
"path": "cmd/iris/cmd/genaccounts.go",
"chars": 6388,
"preview": "package cmd\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-"
},
{
"path": "cmd/iris/cmd/genesis.go",
"chars": 4640,
"preview": "package cmd\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/spf13/cobra\"\n\n\tcometjson \"github.com/cometbft/cometbft/libs/json\"\n\t"
},
{
"path": "cmd/iris/cmd/keys.go",
"chars": 4564,
"preview": "package cmd\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"os\"\n\n\tcosmoshd \"github.com/cosmos/cosmos-sdk/crypto/hd\"\n\tetherminthd \""
},
{
"path": "cmd/iris/cmd/root.go",
"chars": 9405,
"preview": "package cmd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/viper\"\n\n\ttmcfg \"github."
},
{
"path": "cmd/iris/cmd/testnet.go",
"chars": 15625,
"preview": "package cmd\n\n// DONTCOVER\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"github.com/cosmos/cosmos-sdk/runtime\"\n\t\"io/ioutil"
},
{
"path": "cmd/iris/cmd/util.go",
"chars": 10134,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/olebedev/config\"\n\t\"github."
},
{
"path": "cmd/iris/main.go",
"chars": 360,
"preview": "package main\n\nimport (\n\t\"os\"\n\n\tsvrcmd \"github.com/cosmos/cosmos-sdk/server/cmd\"\n\n\t_ \"github.com/irisnet/irishub/v4/clien"
},
{
"path": "contrib/devtools/Makefile",
"chars": 2315,
"preview": "###\n# Find OS and Go environment\n# GO contains the Go binary\n# FS contains the OS file separator\n###\nifeq ($(OS),Windows"
},
{
"path": "contrib/devtools/install-golangci-lint.sh",
"chars": 859,
"preview": "#!/bin/bash\n\nset -euo pipefail\n\ninstaller=\"$(mktemp)\"\ntrap \"rm -f ${installer}\" EXIT\n\nGOBIN=\"${1}\"\nCURL=\"$(which curl)\"\n"
},
{
"path": "crypto/keyring/options.go",
"chars": 815,
"preview": "package keyring\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/crypto/keyring\"\n\n\t\"github.com/evmos/ethermint/crypto/hd\"\n)\n\nvar"
},
{
"path": "docker-compose.yml",
"chars": 1343,
"preview": "version: '3'\n\nservices:\n irisnode0:\n container_name: irisnode0\n image: irisnet/irishub:latest\n ports:\n - \"2"
},
{
"path": "docs/.vuepress/client.js",
"chars": 133,
"preview": "import {defineClientConfig} from \"@vuepress/client\";\r\rexport default defineClientConfig({\r\tenhance({app, router, siteDat"
},
{
"path": "docs/.vuepress/compoments/PageHistory.vue",
"chars": 352,
"preview": "<template>\n <div>\n {{url}}\n </div>\n</template>\n\n<script>\n export default {\n computed: {\n url() {\n c"
},
{
"path": "docs/.vuepress/config.js",
"chars": 2117,
"preview": "import glob from \"glob\";\nimport markdownIt from \"markdown-it\";\nimport meta from \"markdown-it-meta\";\nimport fs from \"fs\";"
},
{
"path": "docs/.vuepress/enhanceApp.js",
"chars": 127,
"preview": "import axios from 'axios'\nimport Vue from 'vue'\n\nVue.use({\n install (Vue) {\n Vue.prototype.$axios = axios.create()"
},
{
"path": "docs/.vuepress/styles/palette.styl",
"chars": 481,
"preview": ".nav-links .repo-link {\n display: none;\n}\n.sidebar-heading {\n color: #999;\n}\n.theme-default-content:not(.custom) > h"
},
{
"path": "docs/Dockerfile",
"chars": 297,
"preview": "FROM node:alpine AS builder\nWORKDIR /app\nCOPY docs/package.json docs/yarn.lock ./\nRUN yarn install\nCOPY docs/ .\nRUN yarn"
},
{
"path": "docs/README.md",
"chars": 376,
"preview": "# Welcome to the IRISnet Documents\n\n\n\n## About IRISnet\n\nIRISnet (a.k.a IRIS Hub) is designed "
},
{
"path": "docs/chainide-for-irisnet/configuration.md",
"chars": 2312,
"preview": "---\norder: 1\n---\n\n# ChainIDE for IRISnet Environment Configuration\n\n> This section provides a detailed explanation of th"
},
{
"path": "docs/chainide-for-irisnet/cosmos-usage.md",
"chars": 1231,
"preview": "---\norder: 3\n---\n\n# How to Use IRISnet Native IDE\n\n> Issue, Edit, and Query FTs and NFTs on IRISnet\n\n## Connect to IRISn"
},
{
"path": "docs/chainide-for-irisnet/usage.md",
"chars": 5214,
"preview": "---\norder: 2\n---\n\n# How to Use IRISnet EVM IDE\n\n> The process of writing, compiling, deploying, interacting, and queryin"
},
{
"path": "docs/cli-client/auth.md",
"chars": 650,
"preview": "# Auth\n\nAuth module is responsible for specifying the base transaction and account types for an application.\n\n## Availab"
},
{
"path": "docs/cli-client/bank.md",
"chars": 2284,
"preview": "# Bank\n\nBank module allows you to manage assets in your local accounts.\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/debug.md",
"chars": 1282,
"preview": "# Debug\n\nA tool for simple debugging.\n\n## Available Commands\n\n| Name | Description "
},
{
"path": "docs/cli-client/distribution.md",
"chars": 5001,
"preview": "# Distribution\n\nThe distribution module allows you to manage your [Staking Rewards](../concepts/general-concepts.md#stak"
},
{
"path": "docs/cli-client/evm.md",
"chars": 999,
"preview": "# EVM\n\n## Available Commands\n\n| Name | Description "
},
{
"path": "docs/cli-client/farm.md",
"chars": 4191,
"preview": "# Farm\n\nFarm module allows you to easily create farm activities on irishub.\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/gov.md",
"chars": 12309,
"preview": "# Gov\n\nThis module provides the basic functionalities for [Governance](../features/governance.md).\n\n## Available Command"
},
{
"path": "docs/cli-client/htlc.md",
"chars": 3396,
"preview": "# HTLC\n\n[HTLC module](../features/htlc.md) allows you to manage local Hash Time Locked Contracts (HTLCs) for atomic swap"
},
{
"path": "docs/cli-client/intro.md",
"chars": 7834,
"preview": "---\norder: 1\n---\n\n# Introduction\n\n`iris` is a command line client for the IRIShub network. IRIShub users can use `iris` "
},
{
"path": "docs/cli-client/keys.md",
"chars": 9842,
"preview": "# Keys\n\nKeys allows you to manage your local tendermint keystore (wallets) for iris.\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/mint.md",
"chars": 471,
"preview": "# Mint\n\nMint module is in charge of calculating the inflated token amount and add the inflated token to reward pool.\n\n##"
},
{
"path": "docs/cli-client/nft.md",
"chars": 7200,
"preview": "# NFT\n\n`NFT` provides the ability to digitize assets. Through this module, each off-chain asset will be modeled as a uni"
},
{
"path": "docs/cli-client/oracle.md",
"chars": 7784,
"preview": "# Oracle\n\nOracle module allows you to manage the feed on IRIS Hub\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/params.md",
"chars": 7804,
"preview": "# Params\n\nParams module allows you to query the system parameters which can be governed (except the gov params) by the ["
},
{
"path": "docs/cli-client/random.md",
"chars": 2615,
"preview": "# Random\n\nRand module allows you to post a random number request to the IRIS Hub and query the random numbers or the pen"
},
{
"path": "docs/cli-client/record.md",
"chars": 933,
"preview": "# Record\n\nRecord module allows you to manage record on IRIS Hub\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/service.md",
"chars": 20944,
"preview": "# Service\n\nService module allows you to define, bind, invoke services on the IRIS Hub. [Read more about iService](../fea"
},
{
"path": "docs/cli-client/slashing.md",
"chars": 1275,
"preview": "# Slashing\n\nSlashing module can unjail validator previously jailed for downtime\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/staking.md",
"chars": 13235,
"preview": "# Staking\n\nStaking module provides a set of subcommands to query staking state and send staking transactions.\n\n## Availa"
},
{
"path": "docs/cli-client/status.md",
"chars": 1796,
"preview": "# Status\n\nQuery node status\n\n**Flags:**\n\n| Name, shorthand | Default | Description "
},
{
"path": "docs/cli-client/tendermint.md",
"chars": 1119,
"preview": "# Tendermint\n\nTendermint state querying subcommands\n\n## Available Commands\n\n| Name, shorthand "
},
{
"path": "docs/cli-client/token.md",
"chars": 9569,
"preview": "# Token\n\nToken module allows you to manage assets on IRIS Hub\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/cli-client/tx.md",
"chars": 9636,
"preview": "# Tx\n\nTx module allows you to sign or broadcast transactions\n\n## Available Commands\n\n| Name |"
},
{
"path": "docs/cli-client/upgrade.md",
"chars": 3810,
"preview": "# Upgrade\n\nThis module provides the basic functions of software version upgrade.\n\n## Available Commands\n\n| Name "
},
{
"path": "docs/concepts/bech32-prefix.md",
"chars": 2349,
"preview": "---\norder: 5\n---\n\n# Bech32 on IRIShub\n\nBech32 is a new Bitcoin address format proposed by Pieter Wuille and Greg Maxwell"
},
{
"path": "docs/concepts/fee.md",
"chars": 3744,
"preview": "# Fee Model\n\nSpecify the maximum fee you want to pay by `--fee`. Gas is the unit used to measure how many resources need"
},
{
"path": "docs/concepts/general-concepts.md",
"chars": 6958,
"preview": "---\norder: 1\n---\n\n# General Concepts\n\n## IRIShub Node Types\n\n### Full Node\n\nA full-node is a program that fully validate"
},
{
"path": "docs/concepts/genesis-file.md",
"chars": 3276,
"preview": "---\norder: 4\n---\n\n# Genesis File\n\nThe Genesis file (~/.iris/config/genesis.json) is the basis for the entire network ini"
},
{
"path": "docs/concepts/gov-params.md",
"chars": 9840,
"preview": "# Gov Parameters\n\nIn IRIShub, there are some special parameters that can be modified through on-chain governance.\nAll th"
},
{
"path": "docs/concepts/key.md",
"chars": 6007,
"preview": "# Key\n\n## A note on HD wallet\n\nHD Wallets, originally specified in Bitcoin's [BIP32](https://github.com/bitcoin/bips/blo"
},
{
"path": "docs/concepts/sentry-nodes.md",
"chars": 1766,
"preview": "---\norder: 3\n---\n\n# Sentry Nodes\n\nValidators are responsible for ensuring that the network can sustain denial of service"
},
{
"path": "docs/concepts/validator-faq.md",
"chars": 10259,
"preview": "---\norder: 2\n---\n\n# Validator FAQ\n\n:::tip\nFor general concepts, please refer to [General Concepts](general-concepts.md)\n"
},
{
"path": "docs/daemon/commands.md",
"chars": 3333,
"preview": "---\norder: 2\n---\n\n# Commands\n\n## Introduction\n\nIRIS Daemon Commands allow you to init, start, reset a node, or generate "
},
{
"path": "docs/daemon/export.md",
"chars": 2390,
"preview": "---\norder: 4\n---\n\n# Export Blockchain State\n\n## Introduction\n\nIRIShub can export the blockchain state and output to a js"
},
{
"path": "docs/daemon/intro.md",
"chars": 2799,
"preview": "---\norder: 1\n---\n\n# Introduction\n\nThe `iris` executable program is the entry point for running an IRIShub node. All the "
},
{
"path": "docs/daemon/local-testnet.md",
"chars": 4651,
"preview": "---\norder: 3\n---\n\n# Local Testnet\n\nFor testing or developing purpose, you may want to setup a local testnet.\n\n## Single "
},
{
"path": "docs/endpoints/grpc-client.md",
"chars": 7701,
"preview": "---\norder: 4\n---\n\n# gRPC Client\n\nirishub v1.0.0 (depends on Cosmos-SDK v0.41) introduced Protobuf as the main [encoding]"
},
{
"path": "docs/endpoints/grpc-rest.md",
"chars": 42028,
"preview": "---\norder: 3\n---\n\n# gRPC Gateway JSON REST\n\nIn irishub v1.0.0, the node continues to serve a REST server. However, the e"
},
{
"path": "docs/endpoints/intro.md",
"chars": 672,
"preview": "---\norder: 1\n---\n\n# Introduction\n\nThis document presents an overview of all the API endpoints a node exposes and the hig"
},
{
"path": "docs/endpoints/legacy-rest.md",
"chars": 35822,
"preview": "---\norder: 2\n---\n\n# Legacy Amino JSON REST\n\nThe irishub versions v1.0.0 (depends on Cosmos-SDK v0.41) and earlier provid"
},
{
"path": "docs/endpoints/proto-docs.md",
"chars": 453632,
"preview": "---\norder: 6\n---\n# Protobuf Documentation\n<!-- This file is auto-generated. Please do not modify it yourself. -->\n<a nam"
},
{
"path": "docs/endpoints/protodoc-markdown.tmpl",
"chars": 3290,
"preview": "---\norder: 6\n---\n# Protobuf Documentation\n<!-- This file is auto-generated. Please do not modify it yourself. -->\n<a nam"
},
{
"path": "docs/endpoints/sdk.md",
"chars": 1063,
"preview": "---\norder: 5\n---\n\n# IRIShub Client SDKs\n\nIRIShub SDK is a software development kit based on the Endpoint provided by IRI"
},
{
"path": "docs/features/bank.md",
"chars": 2721,
"preview": "# Bank\n\n## Summary\n\nThis module is mainly used to transfer coins between accounts, query account balances, and provide c"
},
{
"path": "docs/features/coinswap.md",
"chars": 5899,
"preview": "# Coinswap\n\n## Summary\n\nThis document describes the implementation of the [Constant Product Market Maker Model](https://"
},
{
"path": "docs/features/distribution.md",
"chars": 2071,
"preview": "# Distribution\n\n## Summary\n\nThis module is in charge of distributing collected transaction fee and inflated token to all"
},
{
"path": "docs/features/evm.md",
"chars": 8476,
"preview": "# EVM\n\n## Summary\n\nThis document defines the specification of the [Ethereum Virtual Machine](https://ethereum.org/en/dev"
},
{
"path": "docs/features/governance.md",
"chars": 9829,
"preview": "# Governance\n\n## Concepts\n\nThe governance process is divided in a few steps that are outlined below:\n\n- **Proposal submi"
},
{
"path": "docs/features/guardian.md",
"chars": 2495,
"preview": "# Guardian\n\n## Summary\n\nIRIShub introduce two types of privileged system user controlled by foundations, the profiler an"
},
{
"path": "docs/features/htlc.md",
"chars": 4132,
"preview": "# HTLC\n\n## Concepts\n\n[Hash Time Locked Contract (HTLC)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) is a prot"
},
{
"path": "docs/features/mint.md",
"chars": 3403,
"preview": "# Mint\n\n## Introduction\n\nThe incentive mechanism of POW is widely known and explicit: once a new block is produced, the "
},
{
"path": "docs/features/mt.md",
"chars": 3853,
"preview": "# MT\r\n\r\n## Introduction\r\n\r\n`MT` provides ERC-1155 capacity. The MT module is able to model off-chain assets into unique "
},
{
"path": "docs/features/nft-metadata.json",
"chars": 847,
"preview": "{\n \"title\": \"Asset Metadata\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string"
},
{
"path": "docs/features/nft.md",
"chars": 4343,
"preview": "# NFT\n\n## Introduction\n\n`NFT` provides the ability to digitize assets. Through this module, each off-chain asset will be"
},
{
"path": "docs/features/oracle.md",
"chars": 3193,
"preview": "# Oracle\n\n## Introduction\n\nThe module combines `service` to achieve decentralized injection from trusted Oracles such as"
},
{
"path": "docs/features/random.md",
"chars": 3760,
"preview": "# Random\n\n## Introduction\n\nThis specification describes the usage and scope of random numbers on IRIShub. This feature i"
},
{
"path": "docs/features/service-pricing.json",
"chars": 2691,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"title\": \"iris-service-pricing\",\n \"description\": \"IRI"
},
{
"path": "docs/features/service-result.json",
"chars": 593,
"preview": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"title\": \"iris-service-result\",\n \"description\": \"IRIS"
},
{
"path": "docs/features/service.md",
"chars": 12607,
"preview": "# Service\n\n> **_NOTE:_** Commands shown in this document are for illustration purpose only. For accurate syntax of comm"
},
{
"path": "docs/features/slashing.md",
"chars": 2718,
"preview": "# Slashing\n\n## Summary\n\nCollect the validator's abnormal behavior and implement the corresponding slashing mechanism acc"
},
{
"path": "docs/features/staking.md",
"chars": 7151,
"preview": "# Staking\n\n## Summary\n\nThis specification briefly introduces the functionality of stake module and what user should do w"
},
{
"path": "docs/features/upgrade.md",
"chars": 9605,
"preview": "# Software Upgrade\n\n## Concepts\n\n### Plan\n\nThe `Upgrade` module defines a `Plan` type in which a live upgrade is schedul"
},
{
"path": "docs/get-started/evm-contract.md",
"chars": 4577,
"preview": "# EVM Smart Contract\n\nSince the introduction of Ethereum in 2015, the ability to control digital assets through smart co"
},
{
"path": "docs/get-started/explorers.md",
"chars": 484,
"preview": "---\norder: 6\n---\n\n# IRISnet Explorers\n\nThese block explorers allow you to search, view and analyze IRIS Hub data—like bl"
},
{
"path": "docs/get-started/install.md",
"chars": 1204,
"preview": "---\norder: 2\n---\n\n# Install\n## Install `go`\n\n::: tip\n**Go 1.15+** is required for building and installing the IRIShub so"
},
{
"path": "docs/get-started/intro.md",
"chars": 4460,
"preview": "---\norder: 1\n---\n\n# Introduction\n\n## IRIS Network\n\nThe IRIS network is an internet of blockchains intended to provide a "
},
{
"path": "docs/get-started/mainnet.md",
"chars": 6116,
"preview": "---\norder: 3\n---\n\n# Join The Mainnet\n\n:::tip\n**Requirements:** [install iris](install.md)\n:::\n\n## Run a Full Node\n\n### S"
},
{
"path": "docs/get-started/state-sync.md",
"chars": 1353,
"preview": "---\norder: 7\n---\n\n# State Sync\n\nIf you want to quickly start the node and join IRIS Hub without historical data, you can"
},
{
"path": "docs/get-started/testnet.md",
"chars": 1518,
"preview": "---\norder: 4\n---\n\n# Join The Testnet\n\nAfter IRIS Hub 1.0 upgrade of mainnet, **Nyancat Testnet** starts to operate as a "
},
{
"path": "docs/get-started/wallets.md",
"chars": 677,
"preview": "---\norder: 5\n---\n\n# IRIShub Wallets\n\nThese web and mobile wallets allow you to store & transfer IRIS, delegate IRIS to v"
},
{
"path": "docs/migration/account.md",
"chars": 2477,
"preview": "## Introduction\n\nIRISHub v2.0 changed the generative structure of the entire account system from `auth.BaseAccountProto`"
},
{
"path": "docs/migration/keys.md",
"chars": 2580,
"preview": "# Keys Migrate\n\nThe keyfile (private key) of irishub v0.16.x uses db storage. The new version v1.0+ will offer a new way"
},
{
"path": "docs/package.json",
"chars": 554,
"preview": "{\n \"name\": \"docs\",\n \"version\": \"1.0.0\",\n \"description\": \"IRISnet Documents\",\n \"main\": \"index.js\",\n \"scripts\": {\n "
},
{
"path": "docs/resources/whitepaper.md",
"chars": 90,
"preview": "# White Paper\n\n- [English](https://github.com/irisnet/irisnet/blob/master/WHITEPAPER.md)\n\n"
},
{
"path": "docs/tools/kms/kms_cpu.md",
"chars": 55,
"preview": "# Setting up Tendermint KMS + CPU\n\nWORKING IN PROGRESS\n"
},
{
"path": "docs/tools/kms/kms_ledger.md",
"chars": 58,
"preview": "# Setting up Tendermint KMS + Ledger\n\nWORKING IN PROGRESS\n"
},
{
"path": "docs/tools/kms.md",
"chars": 2418,
"preview": "---\norder: 3\n---\n\n# Key Management System\n\n## Introduction\n\n[Tendermint KMS](https://github.com/iqlusioninc/tmkms) is a "
},
{
"path": "docs/tools/ledger.md",
"chars": 4830,
"preview": "---\norder: 4\n---\n\n# Ledger Nano Support\n\nIt is recommended to have a basic understanding of the [IRIShub Key](../concept"
},
{
"path": "docs/tools/monitor.md",
"chars": 8797,
"preview": "---\norder: 1\n---\n\n# IRIS Hub Monitor\n\n## Introduction\n\nIRIShub can report and serve the Prometheus metrics, which can be"
},
{
"path": "docs/tools/priv_validator_state.json",
"chars": 185,
"preview": "{\n \"height\": \"0\",\n \"round\": \"0\",\n \"step\": 0,\n \"block_id\": {\n \"hash\": \"\",\n \"part_set_header\": {"
},
{
"path": "go.mod",
"chars": 13215,
"preview": "module github.com/irisnet/irishub/v4\n\ngo 1.22.11\n\ntoolchain go1.24.9\n\nrequire (\n\tgithub.com/bianjieai/nft-transfer v1.1."
},
{
"path": "go.sum",
"chars": 204889,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "modules/evm/eip1559.go",
"chars": 769,
"preview": "package evm\n\nimport (\n\t\"math/big\"\n\n\tsdkmath \"cosmossdk.io/math\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\tauthtypes \"g"
},
{
"path": "modules/evm/keeper.go",
"chars": 4437,
"preview": "package evm\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\n\ttmbytes \"github.com/cometbft/cometbft/libs/bytes\"\n"
},
{
"path": "modules/evm/moudle.go",
"chars": 1300,
"preview": "package evm\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/types/module\"\n\n\tethermint \"github.com/evmos/ethermint/x/evm\"\n\t\"gith"
},
{
"path": "modules/evm/state_transition.go",
"chars": 7942,
"preview": "package evm\n\nimport (\n\t\"math/big\"\n\n\terrortypes \"github.com/cosmos/cosmos-sdk/types/errors\"\n\n\tsdkmath \"cosmossdk.io/math\""
},
{
"path": "modules/evm/types.go",
"chars": 132,
"preview": "package evm\n\nconst (\n\tEventEIP1559Burnt = \"eip1559_burnt\"\n\n\tAttributeKeyBaseFee = \"base_fee\"\n\tAttributeKeyBurntFee = \"b"
},
{
"path": "modules/guardian/client/cli/cli_test.go",
"chars": 5308,
"preview": "package cli_test\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"cosmossdk.io/math\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"github"
},
{
"path": "modules/guardian/client/cli/flags.go",
"chars": 553,
"preview": "// nolint\npackage cli\n\nimport (\n\tflag \"github.com/spf13/pflag\"\n)\n\nconst (\n\tFlagAddress = \"address\"\n\tFlagDescription "
},
{
"path": "modules/guardian/client/cli/query.go",
"chars": 1521,
"preview": "package cli\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/spf13/cobra\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/"
},
{
"path": "modules/guardian/client/cli/tx.go",
"chars": 2952,
"preview": "package cli\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cosmos/cosmos-sdk/client\"\n\t\"github.com/cosmos/cosmos-sdk/client/flags\"\n\t\"gith"
},
{
"path": "modules/guardian/client/testutil/test_helpers.go",
"chars": 1613,
"preview": "package testutil\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/cometbft/cometbft/libs/cli\"\n\tcoretypes \"github.com/cometbft/c"
},
{
"path": "modules/guardian/genesis.go",
"chars": 1239,
"preview": "package guardian\n\nimport (\n\t\"fmt\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/irisnet/irishub/v4/modules/gu"
},
{
"path": "modules/guardian/genesis_test.go",
"chars": 1028,
"preview": "package guardian_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\ttmproto \"github.com/cometbft/cometbft"
},
{
"path": "modules/guardian/handler.go",
"chars": 1032,
"preview": "package guardian\n\nimport (\n\tsdkerrors \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\terrorstypes \"gith"
},
{
"path": "modules/guardian/keeper/grpc_query.go",
"chars": 1004,
"preview": "package keeper\n\nimport (\n\t\"context\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n\n\tsdk \"github.com/"
},
{
"path": "modules/guardian/keeper/grpc_query_test.go",
"chars": 898,
"preview": "package keeper_test\n\nimport (\n\tgocontext \"context\"\n\n\t\"github.com/cosmos/cosmos-sdk/baseapp\"\n\t\"github.com/cosmos/cosmos-s"
},
{
"path": "modules/guardian/keeper/keeper.go",
"chars": 2133,
"preview": "package keeper\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"cosmossdk.io/log\"\n\tstoretypes \"cosmossdk.io/store/types\"\n\t\"github.com/cosm"
},
{
"path": "modules/guardian/keeper/keeper_test.go",
"chars": 2622,
"preview": "package keeper_test\n\nimport (\n\t\"encoding/hex\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/suite\"\n\n\ttmproto \"github.com/com"
},
{
"path": "modules/guardian/keeper/msg_service.go",
"chars": 2913,
"preview": "package keeper\n\nimport (\n\t\"context\"\n\n\tsdkerrors \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"githu"
},
{
"path": "modules/guardian/module.go",
"chars": 5856,
"preview": "package guardian\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/grp"
},
{
"path": "modules/guardian/types/codec.go",
"chars": 1056,
"preview": "package types\n\nimport (\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\t\"github.com/cosmos/cosmos-sdk/codec/types\"\n\tcryptocodec \""
},
{
"path": "modules/guardian/types/errors.go",
"chars": 430,
"preview": "package types\n\nimport (\n\tsdkerrors \"cosmossdk.io/errors\"\n)\n\n// guardian module sentinel errors\nvar (\n\tErrUnknownOperator"
},
{
"path": "modules/guardian/types/event.go",
"chars": 298,
"preview": "// nolint\npackage types\n\n// guardian module event types\nconst (\n\tEventTypeAddSuper = \"add_super\"\n\tEventTypeDeleteSupe"
},
{
"path": "modules/guardian/types/genesis.go",
"chars": 293,
"preview": "package types\n\n// NewGenesisState constructs a GenesisState\nfunc NewGenesisState(supers []Super) *GenesisState {\n\treturn"
},
{
"path": "modules/guardian/types/genesis.pb.go",
"chars": 8377,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: irishub/guardian/genesis.proto\n\npackage types\n\nimport (\n\tf"
},
{
"path": "modules/guardian/types/guardian.pb.go",
"chars": 12711,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: irishub/guardian/guardian.proto\n\npackage types\n\nimport (\n\t"
},
{
"path": "modules/guardian/types/keys.go",
"chars": 758,
"preview": "package types\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// nolint\nconst (\n\t// module name\n\tModuleName = \"gu"
},
{
"path": "modules/guardian/types/msgs.go",
"chars": 3320,
"preview": "package types\n\nimport (\n\tsdkerrors \"cosmossdk.io/errors\"\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\terrortypes \"github.c"
},
{
"path": "modules/guardian/types/msgs_test.go",
"chars": 4213,
"preview": "package types\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/cometbft/cometbft/crypto"
},
{
"path": "modules/guardian/types/query.pb.go",
"chars": 18058,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: irishub/guardian/query.proto\n\npackage types\n\nimport (\n\tcon"
},
{
"path": "modules/guardian/types/query.pb.gw.go",
"chars": 6397,
"preview": "// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.\n// source: irishub/guardian/query.proto\n\n/*\nPackage types is "
},
{
"path": "modules/guardian/types/tx.pb.go",
"chars": 26819,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: irishub/guardian/tx.proto\n\npackage types\n\nimport (\n\tcontex"
},
{
"path": "modules/guardian/types/types.go",
"chars": 1690,
"preview": "package types\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pkg/errors\"\n\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n)\n\n// NewSuper const"
},
{
"path": "modules/internft/interface.go",
"chars": 1272,
"preview": "package internft\n\nimport (\n\t\"context\"\n\n\tnftkeeper \"cosmossdk.io/x/nft/keeper\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tsdk"
},
{
"path": "modules/internft/keeper.go",
"chars": 4014,
"preview": "package internft\n\nimport (\n\t\"cosmossdk.io/log\"\n\t\"cosmossdk.io/x/nft\"\n\t\"github.com/cosmos/cosmos-sdk/codec\"\n\tcodectypes \""
},
{
"path": "modules/mint/abci.go",
"chars": 1613,
"preview": "package mint\n\nimport (\n\tsdk \"github.com/cosmos/cosmos-sdk/types\"\n\n\t\"github.com/irisnet/irishub/v4/modules/mint/keeper\"\n\t"
}
]
// ... and 74 more files (download for full content)
About this extraction
This page contains the full source code of the irisnet/irishub GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 274 files (8.7 MB), approximately 2.3M tokens, and a symbol index with 2200 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.