diff --git a/.dockerignore b/.dockerignore index 816fbd68..a4d14f64 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,3 +3,6 @@ out/ .git/ docs/ tests/ + +go.work +go.work.sum diff --git a/.github/workflows/ci-default.yml b/.github/workflows/ci-default.yml index bfaad03b..1968193f 100644 --- a/.github/workflows/ci-default.yml +++ b/.github/workflows/ci-default.yml @@ -21,6 +21,8 @@ jobs: steps: - name: checkout repo from current commit uses: actions/checkout@v3 + with: + submodules: true - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..3a85a357 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tests/e2e/kvtool"] + path = tests/e2e/kvtool + url = https://github.com/kava-labs/kvtool diff --git a/README.md b/README.md index f431a189..494f8ba1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Reference implementation of Kava, a blockchain for cross-chain DeFi. Built using ## Mainnet -The current recommended version of the software for mainnet is [v0.19.0](https://github.com/Kava-Labs/kava/releases/tag/v0.19.0). The master branch of this repository often contains considerable development work since the last mainnet release and is __not__ runnable on mainnet. +The current recommended version of the software for mainnet is [v0.21.0](https://github.com/Kava-Labs/kava/releases/tag/v0.21.0). The master branch of this repository often contains considerable development work since the last mainnet release and is __not__ runnable on mainnet. ### Installation and Setup For detailed instructions see [the Kava docs](https://docs.kava.io/docs/participate/validator-node). @@ -34,6 +34,16 @@ git checkout v0.21.0 make install ``` +End-to-end tests of Kava use a tool for generating networks with different configurations: [kvtool](https://github.com/Kava-Labs/kvtool). +This is included as a git submodule at [`tests/e2e/kvtool`](tests/e2e/kvtool/). +When first cloning the repository, if you intend to run the e2e integration tests, you must also +clone the submodules: +```bash +git clone --recurse-submodules https://github.com/Kava-Labs/kava.git +``` + +Or, if you have already cloned the repo: `git submodule update --init` + ## Testnet For further information on joining the testnet, head over to the [testnet repo](https://github.com/Kava-Labs/kava-testnets). diff --git a/go.mod b/go.mod index c75985bf..1003ce23 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/kava-labs/kava go 1.18 require ( + github.com/cenkalti/backoff/v4 v4.1.3 github.com/cosmos/cosmos-proto v1.0.0-alpha6 github.com/cosmos/cosmos-sdk v0.45.10 github.com/cosmos/go-bip39 v1.0.0 @@ -13,10 +14,10 @@ require ( github.com/golang/protobuf v1.5.2 github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/ory/dockertest/v3 v3.9.1 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.0 github.com/stretchr/testify v1.8.0 + github.com/subosito/gotenv v1.4.1 github.com/tendermint/tendermint v0.34.24 github.com/tendermint/tm-db v0.6.7 github.com/tharsis/ethermint v0.14.0 @@ -29,10 +30,7 @@ require ( require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect github.com/99designs/keyring v1.1.6 // indirect - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.6.0 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect @@ -43,12 +41,10 @@ require ( github.com/btcsuite/btcd v0.22.1 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect github.com/confio/ics23/go v0.7.0 // indirect - github.com/containerd/continuity v0.3.0 // indirect github.com/cosmos/btcutil v1.0.4 // indirect github.com/cosmos/iavl v0.19.4 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect @@ -60,10 +56,6 @@ require ( github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v3 v3.2103.2 // indirect github.com/dgraph-io/ristretto v0.1.0 // indirect - github.com/docker/cli v20.10.14+incompatible // indirect - github.com/docker/docker v20.10.19+incompatible // indirect - github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect github.com/edsrzf/mmap-go v1.0.0 // indirect @@ -83,7 +75,6 @@ require ( github.com/google/btree v1.0.1 // indirect github.com/google/flatbuffers v1.12.1 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -98,7 +89,6 @@ require ( github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.0 // indirect github.com/huin/goupnp v1.0.2 // indirect - github.com/imdario/mergo v0.3.12 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect @@ -116,12 +106,8 @@ require ( github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/opencontainers/runc v1.1.3 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect @@ -140,14 +126,12 @@ require ( github.com/rs/zerolog v1.27.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.13.0 // indirect github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969 // indirect github.com/stretchr/objx v0.4.0 // indirect - github.com/subosito/gotenv v1.4.1 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect @@ -155,21 +139,16 @@ require ( github.com/tklauser/go-sysconf v0.3.7 // indirect github.com/tklauser/numcpus v0.2.3 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/zondax/hid v0.9.0 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/crypto v0.1.0 // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect golang.org/x/sys v0.1.0 // indirect golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect - golang.org/x/tools v0.2.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 // indirect diff --git a/go.sum b/go.sum index f088807f..7ad6a249 100644 --- a/go.sum +++ b/go.sum @@ -45,7 +45,6 @@ github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiU github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= @@ -66,9 +65,7 @@ github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -168,11 +165,9 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= @@ -185,14 +180,11 @@ github.com/coinbase/rosetta-sdk-go v0.7.0 h1:lmTO/JEpCvZgpbkOITL95rA80CPKb5CtMzL github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= @@ -221,10 +213,7 @@ github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6V github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= @@ -255,16 +244,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/cli v20.10.14+incompatible h1:dSBKJOVesDgHo7rbxlYjYsXe7gPzrTT+/cKQgpDAazg= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= @@ -298,7 +280,6 @@ github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -349,7 +330,6 @@ github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5Nq github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -361,7 +341,6 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= @@ -447,8 +426,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -537,8 +514,6 @@ github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSa github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -695,9 +670,6 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -705,7 +677,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= @@ -745,13 +716,8 @@ github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -762,8 +728,6 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -870,7 +834,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= @@ -883,9 +846,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -938,7 +899,6 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= @@ -980,18 +940,10 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1093,7 +1045,6 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1189,7 +1140,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1201,7 +1151,6 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1248,18 +1197,13 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1299,7 +1243,6 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1346,7 +1289,6 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1446,7 +1388,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1485,10 +1426,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0 h1:I0DwBVMGAx26dttAj1BtJLAkVGncrkkUXfJLC4Flt/I= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/tests/e2e/.env b/tests/e2e/.env new file mode 100644 index 00000000..fe3e6cea --- /dev/null +++ b/tests/e2e/.env @@ -0,0 +1,4 @@ +# E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC is for a funded account used to intialize all new testing accounts. +E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC='tent fitness boat among census primary pipe nose dream glance cave turtle electric fabric jacket shaft easy myself genuine this sibling pulse word unfold' +# E2E_INCLUDE_IBC_TESTS when true will start a 2nd chain & open an IBC channel. It will enable all IBC tests. +E2E_INCLUDE_IBC_TESTS=true diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d22d701a..a6d7fa71 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -3,13 +3,17 @@ package e2e_test import ( "context" "math/big" + "strings" "testing" + "time" "github.com/stretchr/testify/suite" "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + ibctypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" + ibcclienttypes "github.com/cosmos/ibc-go/v3/modules/core/02-client/types" ethtypes "github.com/ethereum/go-ethereum/core/types" emtypes "github.com/tharsis/ethermint/types" @@ -41,12 +45,12 @@ func (suite *IntegrationTestSuite) TestChainID() { suite.NoError(err) // EVM query - evmNetworkId, err := suite.EvmClient.NetworkID(context.Background()) + evmNetworkId, err := suite.Kava.EvmClient.NetworkID(context.Background()) suite.NoError(err) suite.Equal(expectedEvmNetworkId, evmNetworkId) // SDK query - nodeInfo, err := suite.Tm.GetNodeInfo(context.Background(), &tmservice.GetNodeInfoRequest{}) + nodeInfo, err := suite.Kava.Tm.GetNodeInfo(context.Background(), &tmservice.GetNodeInfoRequest{}) suite.NoError(err) suite.Equal(testutil.ChainId, nodeInfo.DefaultNodeInfo.Network) } @@ -54,21 +58,21 @@ func (suite *IntegrationTestSuite) TestChainID() { // example test that funds a new account & queries its balance func (suite *IntegrationTestSuite) TestFundedAccount() { funds := ukava(1e7) - acc := suite.NewFundedAccount("example-acc", sdk.NewCoins(funds)) + acc := suite.Kava.NewFundedAccount("example-acc", sdk.NewCoins(funds)) // check that the sdk & evm signers are for the same account suite.Equal(acc.SdkAddress.String(), util.EvmToSdkAddress(acc.EvmAddress).String()) suite.Equal(acc.EvmAddress.Hex(), util.SdkToEvmAddress(acc.SdkAddress).Hex()) // check balance via SDK query - res, err := suite.Bank.Balance(context.Background(), banktypes.NewQueryBalanceRequest( + res, err := suite.Kava.Bank.Balance(context.Background(), banktypes.NewQueryBalanceRequest( acc.SdkAddress, "ukava", )) suite.NoError(err) suite.Equal(funds, *res.Balance) // check balance via EVM query - akavaBal, err := suite.EvmClient.BalanceAt(context.Background(), acc.EvmAddress, nil) + akavaBal, err := suite.Kava.EvmClient.BalanceAt(context.Background(), acc.EvmAddress, nil) suite.NoError(err) suite.Equal(funds.Amount.MulRaw(1e12).BigInt(), akavaBal) } @@ -77,14 +81,14 @@ func (suite *IntegrationTestSuite) TestFundedAccount() { func (suite *IntegrationTestSuite) TestTransferOverEVM() { // fund an account that can perform the transfer initialFunds := ukava(1e7) // 10 KAVA - acc := suite.NewFundedAccount("evm-test-transfer", sdk.NewCoins(initialFunds)) + acc := suite.Kava.NewFundedAccount("evm-test-transfer", sdk.NewCoins(initialFunds)) // get a rando account to send kava to randomAddr := app.RandomAddress() to := util.SdkToEvmAddress(randomAddr) // example fetching of nonce (account sequence) - nonce, err := suite.EvmClient.PendingNonceAt(context.Background(), acc.EvmAddress) + nonce, err := suite.Kava.EvmClient.PendingNonceAt(context.Background(), acc.EvmAddress) suite.NoError(err) suite.Equal(uint64(0), nonce) // sanity check. the account should have no prior txs @@ -104,6 +108,68 @@ func (suite *IntegrationTestSuite) TestTransferOverEVM() { QuoRaw(1e12) // convert akava to ukava // expect (9 - gas used) KAVA remaining in account. - balance := suite.QuerySdkForBalances(acc.SdkAddress) + balance := suite.Kava.QuerySdkForBalances(acc.SdkAddress) suite.Equal(sdk.NewInt(9e6).Sub(ukavaUsedForGas), balance.AmountOf("ukava")) } + +// TestIbcTransfer transfers KAVA from the primary kava chain (suite.Kava) to the ibc chain (suite.Ibc). +// Note that because the IBC chain also runs kava's binary, this tests both the sending & receiving. +func (suite *IntegrationTestSuite) TestIbcTransfer() { + suite.SkipIfIbcDisabled() + + // ARRANGE + // setup kava account + funds := ukava(1e7) // 10 KAVA + kavaAcc := suite.Kava.NewFundedAccount("ibc-transfer-kava-side", sdk.NewCoins(funds)) + // setup ibc account + ibcAcc := suite.Ibc.NewFundedAccount("ibc-transfer-ibc-side", sdk.NewCoins()) + + gasLimit := int64(2e5) + fee := ukava(7500) + + fundsToSend := ukava(5e6) // 5 KAVA + transferMsg := ibctypes.NewMsgTransfer( + testutil.IbcPort, + testutil.IbcChannel, + fundsToSend, + kavaAcc.SdkAddress.String(), + ibcAcc.SdkAddress.String(), + ibcclienttypes.NewHeight(0, 0), // timeout height disabled when 0 + uint64(time.Now().Add(30*time.Second).UnixNano()), + ) + // initial - sent - fee + expectedSrcBalance := funds.Sub(fundsToSend).Sub(fee) + + // ACT + // IBC transfer from kava -> ibc + transferTo := util.KavaMsgRequest{ + Msgs: []sdk.Msg{transferMsg}, + GasLimit: uint64(gasLimit), + FeeAmount: sdk.NewCoins(fee), + Memo: "sent from Kava!", + } + res := kavaAcc.SignAndBroadcastKavaTx(transferTo) + + // ASSERT + suite.NoError(res.Err) + + // the balance should be deducted from kava account + suite.Eventually(func() bool { + balance := suite.Kava.QuerySdkForBalances(kavaAcc.SdkAddress) + return balance.AmountOf("ukava").Equal(expectedSrcBalance.Amount) + }, 10*time.Second, 1*time.Second) + + // expect the balance to be transferred to the ibc chain! + suite.Eventually(func() bool { + balance := suite.Ibc.QuerySdkForBalances(ibcAcc.SdkAddress) + found := false + for _, c := range balance { + // find the ibc denom coin + if strings.HasPrefix(c.Denom, "ibc/") { + suite.Equal(fundsToSend.Amount, c.Amount) + found = true + } + } + return found + }, 10*time.Second, 1*time.Second) +} diff --git a/tests/e2e/generated/kava-1/config/addrbook.json b/tests/e2e/generated/kava-1/config/addrbook.json deleted file mode 100644 index cbaf0bae..00000000 --- a/tests/e2e/generated/kava-1/config/addrbook.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "key": "a8235b98e65b6890091537ac", - "addrs": [] -} \ No newline at end of file diff --git a/tests/e2e/generated/kava-1/config/app.toml b/tests/e2e/generated/kava-1/config/app.toml deleted file mode 100644 index 32a23ee3..00000000 --- a/tests/e2e/generated/kava-1/config/app.toml +++ /dev/null @@ -1,272 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Base Configuration ### -############################################################################### - -# The minimum gas prices a validator is willing to accept for processing a -# transaction. A transaction's fees must meet the minimum of any denomination -# specified in this config (e.g. 0.25token1;0.0001token2). -minimum-gas-prices = "0.001ukava;1000000000akava" - -# default: the last 100 states are kept in addition to every 500th state; pruning at 10 block intervals -# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -# everything: all saved states will be deleted, storing only the current and previous state; pruning at 10 block intervals -# custom: allow pruning options to be manually specified through 'pruning-keep-recent', 'pruning-keep-every', and 'pruning-interval' -pruning = "nothing" - -# These are applied if and only if the pruning strategy is custom. -pruning-keep-recent = "0" -pruning-keep-every = "0" -pruning-interval = "0" - -# HaltHeight contains a non-zero block height at which a node will gracefully -# halt and shutdown that can be used to assist upgrades and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-height = 0 - -# HaltTime contains a non-zero minimum block time (in Unix seconds) at which -# a node will gracefully halt and shutdown that can be used to assist upgrades -# and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-time = 0 - -# MinRetainBlocks defines the minimum block height offset from the current -# block being committed, such that all blocks past this offset are pruned -# from Tendermint. It is used as part of the process of determining the -# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates -# that no blocks should be pruned. -# -# This configuration value is only responsible for pruning Tendermint blocks. -# It has no bearing on application state pruning which is determined by the -# "pruning-*" configurations. -# -# Note: Tendermint block pruning is dependant on this parameter in conunction -# with the unbonding (safety threshold) period, state pruning and state sync -# snapshot parameters to determine the correct minimum value of -# ResponseCommit.RetainHeight. -min-retain-blocks = 0 - -# InterBlockCache enables inter-block caching. -inter-block-cache = true - -# IndexEvents defines the set of events in the form {eventType}.{attributeKey}, -# which informs Tendermint what to index. If empty, all events will be indexed. -# -# Example: -# ["message.sender", "message.recipient"] -index-events = [] - -# IavlCacheSize set the size of the iavl tree cache. -# Default cache size is 50mb. -iavl-cache-size = 781250 -trace = true -# IAVLDisableFastNode enables or disables the fast node feature of IAVL. -# Default is true. -iavl-disable-fastnode = true - -############################################################################### -### Telemetry Configuration ### -############################################################################### - -[telemetry] - -# Prefixed with keys to separate services. -service-name = "" - -# Enabled enables the application telemetry functionality. When enabled, -# an in-memory sink is also enabled by default. Operators may also enabled -# other sinks such as Prometheus. -enabled = false - -# Enable prefixing gauge values with hostname. -enable-hostname = false - -# Enable adding hostname to labels. -enable-hostname-label = false - -# Enable adding service to labels. -enable-service-label = false - -# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. -prometheus-retention-time = 0 - -# GlobalLabels defines a global set of name/value label tuples applied to all -# metrics emitted using the wrapper functions defined in telemetry package. -# -# Example: -# [["chain_id", "cosmoshub-1"]] -global-labels = [ -] - -############################################################################### -### API Configuration ### -############################################################################### - -[api] - -# Enable defines if the API server should be enabled. -enable = true - -# Swagger defines if swagger documentation should automatically be registered. -swagger = false - -# Address defines the API server to listen on. -address = "tcp://0.0.0.0:1317" - -# MaxOpenConnections defines the number of maximum open connections. -max-open-connections = 1000 - -# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds). -rpc-read-timeout = 10 - -# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). -rpc-write-timeout = 0 - -# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes). -rpc-max-body-bytes = 1000000 - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enabled-unsafe-cors = true - -############################################################################### -### Rosetta Configuration ### -############################################################################### - -[rosetta] - -# Enable defines if the Rosetta API server should be enabled. -enable = true - -# Address defines the Rosetta API server to listen on. -address = ":8080" - -# Network defines the name of the blockchain that will be returned by Rosetta. -blockchain = "app" - -# Network defines the name of the network that will be returned by Rosetta. -network = "network" - -# Retries defines the number of retries when connecting to the node before failing. -retries = 3 - -# Offline defines if Rosetta server should run in offline mode. -offline = false - -############################################################################### -### gRPC Configuration ### -############################################################################### - -[grpc] - -# Enable defines if the gRPC server should be enabled. -enable = true - -# Address defines the gRPC server address to bind to. -address = "0.0.0.0:9090" - -############################################################################### -### gRPC Web Configuration ### -############################################################################### - -[grpc-web] - -# GRPCWebEnable defines if the gRPC-web should be enabled. -# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. -enable = true - -# Address defines the gRPC-web server address to bind to. -address = "0.0.0.0:9091" - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enable-unsafe-cors = false - -############################################################################### -### State Sync Configuration ### -############################################################################### - -# State sync snapshots allow other nodes to rapidly join the network without replaying historical -# blocks, instead downloading and applying a snapshot of the application state at a given height. -[state-sync] - -# snapshot-interval specifies the block interval at which local state sync snapshots are -# taken (0 to disable). Must be a multiple of pruning-keep-every. -snapshot-interval = 0 - -# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). -snapshot-keep-recent = 2 - -############################################################################### -### EVM Configuration ### -############################################################################### - -[evm] - -# Tracer defines the 'vm.Tracer' type that the EVM will use when the node is run in -# debug mode. To enable tracing use the '--evm.tracer' flag when starting your node. -# Valid types are: json|struct|access_list|markdown -tracer = "json" - -# MaxTxGasWanted defines the gas wanted for each eth tx returned in ante handler in check tx mode. -max-tx-gas-wanted = 500000 - -############################################################################### -### JSON RPC Configuration ### -############################################################################### - -[json-rpc] - -# Enable defines if the gRPC server should be enabled. -enable = true - -# Address defines the EVM RPC HTTP server address to bind to. -address = "0.0.0.0:8545" - -# Address defines the EVM WebSocket server address to bind to. -ws-address = "0.0.0.0:8546" - -# API defines a list of JSON-RPC namespaces that should be enabled -# Example: "eth,txpool,personal,net,debug,web3" -api = "eth,net,web3" - -# GasCap sets a cap on gas that can be used in eth_call/estimateGas (0=infinite). Default: 25,000,000. -gas-cap = 25000000 - -# EVMTimeout is the global timeout for eth_call. Default: 5s. -evm-timeout = "5s" - -# TxFeeCap is the global tx-fee cap for send transaction. Default: 1eth. -txfee-cap = 1 - -# FilterCap sets the global cap for total number of filters that can be created -filter-cap = 200 - -# FeeHistoryCap sets the global cap for total number of blocks that can be fetched -feehistory-cap = 100 - -# LogsCap defines the max number of results can be returned from single 'eth_getLogs' query. -logs-cap = 10000 - -# BlockRangeCap defines the max block range allowed for 'eth_getLogs' query. -block-range-cap = 10000 - -# HTTPTimeout is the read/write timeout of http json-rpc server. -http-timeout = "30s" - -# HTTPIdleTimeout is the idle timeout of http json-rpc server. -http-idle-timeout = "2m0s" - -############################################################################### -### TLS Configuration ### -############################################################################### - -[tls] - -# Certificate path defines the cert.pem file path for the TLS configuration. -certificate-path = "" - -# Key path defines the key.pem file path for the TLS configuration. -key-path = "" diff --git a/tests/e2e/generated/kava-1/config/client.toml b/tests/e2e/generated/kava-1/config/client.toml deleted file mode 100644 index bb1abab1..00000000 --- a/tests/e2e/generated/kava-1/config/client.toml +++ /dev/null @@ -1,17 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Client Configuration ### -############################################################################### - -# The network chain ID -chain-id = "kavalocalnet_8888-1" -# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) -keyring-backend = "test" -# CLI output format (text|json) -output = "text" -# : to Tendermint RPC interface for this chain -node = "tcp://localhost:26657" -# Transaction broadcasting mode (sync|async|block) -broadcast-mode = "block" diff --git a/tests/e2e/generated/kava-1/config/config.toml b/tests/e2e/generated/kava-1/config/config.toml deleted file mode 100644 index 82c439d0..00000000 --- a/tests/e2e/generated/kava-1/config/config.toml +++ /dev/null @@ -1,466 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -# NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or -# relative to the home directory (e.g. "data"). The home directory is -# "$HOME/.tendermint" by default, but could be changed via $TMHOME env variable -# or --home cmd flag. - -####################################################################### -### Main Base Config Options ### -####################################################################### - -# TCP or UNIX socket address of the ABCI application, -# or the name of an ABCI application compiled in with the Tendermint binary -proxy_app = "tcp://127.0.0.1:26658" - -# A custom human readable name for this node -moniker = "validator" - -# If this node is many blocks behind the tip of the chain, FastSync -# allows them to catchup quickly by downloading blocks in parallel -# and verifying their commits -fast_sync = true - -# Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb -# * goleveldb (github.com/syndtr/goleveldb - most popular implementation) -# - pure go -# - stable -# * cleveldb (uses levigo wrapper) -# - fast -# - requires gcc -# - use cleveldb build tag (go build -tags cleveldb) -# * boltdb (uses etcd's fork of bolt - github.com/etcd-io/bbolt) -# - EXPERIMENTAL -# - may be faster is some use-cases (random reads - indexer) -# - use boltdb build tag (go build -tags boltdb) -# * rocksdb (uses github.com/tecbot/gorocksdb) -# - EXPERIMENTAL -# - requires gcc -# - use rocksdb build tag (go build -tags rocksdb) -# * badgerdb (uses github.com/dgraph-io/badger) -# - EXPERIMENTAL -# - use badgerdb build tag (go build -tags badgerdb) -db_backend = "goleveldb" - -# Database directory -db_dir = "data" - -# Output level for logging, including package level options -log_level = "info" - -# Output format: 'plain' (colored text) or 'json' -log_format = "plain" - -##### additional base config options ##### - -# Path to the JSON file containing the initial validator set and other meta data -genesis_file = "config/genesis.json" - -# Path to the JSON file containing the private key to use as a validator in the consensus protocol -priv_validator_key_file = "config/priv_validator_key.json" - -# Path to the JSON file containing the last sign state of a validator -priv_validator_state_file = "data/priv_validator_state.json" - -# TCP or UNIX socket address for Tendermint to listen on for -# connections from an external PrivValidator process -priv_validator_laddr = "" - -# Path to the JSON file containing the private key to use for node authentication in the p2p protocol -node_key_file = "config/node_key.json" - -# Mechanism to connect to the ABCI application: socket | grpc -abci = "socket" - -# If true, query the ABCI app on connecting to a new peer -# so the app can decide if we should keep the connection or not -filter_peers = false - - -####################################################################### -### Advanced Configuration Options ### -####################################################################### - -####################################################### -### RPC Server Configuration Options ### -####################################################### -[rpc] - -# TCP or UNIX socket address for the RPC server to listen on -laddr = "tcp://127.0.0.1:26657" - -# A list of origins a cross-domain request can be executed from -# Default value '[]' disables cors support -# Use '["*"]' to allow any origin -cors_allowed_origins = [] - -# A list of methods the client is allowed to use with cross-domain requests -cors_allowed_methods = ["HEAD", "GET", "POST", ] - -# A list of non simple headers the client is allowed to use with cross-domain requests -cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", ] - -# TCP or UNIX socket address for the gRPC server to listen on -# NOTE: This server only supports /broadcast_tx_commit -grpc_laddr = "" - -# Maximum number of simultaneous connections. -# Does not include RPC (HTTP&WebSocket) connections. See max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -grpc_max_open_connections = 900 - -# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool -unsafe = false - -# Maximum number of simultaneous connections (including WebSocket). -# Does not include gRPC connections. See grpc_max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -max_open_connections = 900 - -# Maximum number of unique clientIDs that can /subscribe -# If you're using /broadcast_tx_commit, set to the estimated maximum number -# of broadcast_tx_commit calls per block. -max_subscription_clients = 100 - -# Maximum number of unique queries a given client can /subscribe to -# If you're using GRPC (or Local RPC client) and /broadcast_tx_commit, set to -# the estimated # maximum number of broadcast_tx_commit calls per block. -max_subscriptions_per_client = 5 - -# Experimental parameter to specify the maximum number of events a node will -# buffer, per subscription, before returning an error and closing the -# subscription. Must be set to at least 100, but higher values will accommodate -# higher event throughput rates (and will use more memory). -experimental_subscription_buffer_size = 200 - -# Experimental parameter to specify the maximum number of RPC responses that -# can be buffered per WebSocket client. If clients cannot read from the -# WebSocket endpoint fast enough, they will be disconnected, so increasing this -# parameter may reduce the chances of them being disconnected (but will cause -# the node to use more memory). -# -# Must be at least the same as "experimental_subscription_buffer_size", -# otherwise connections could be dropped unnecessarily. This value should -# ideally be somewhat higher than "experimental_subscription_buffer_size" to -# accommodate non-subscription-related RPC responses. -experimental_websocket_write_buffer_size = 200 - -# If a WebSocket client cannot read fast enough, at present we may -# silently drop events instead of generating an error or disconnecting the -# client. -# -# Enabling this experimental parameter will cause the WebSocket connection to -# be closed instead if it cannot read fast enough, allowing for greater -# predictability in subscription behaviour. -experimental_close_on_slow_client = false - -# How long to wait for a tx to be committed during /broadcast_tx_commit. -# WARNING: Using a value larger than 10s will result in increasing the -# global HTTP write timeout, which applies to all connections and endpoints. -# See https://github.com/tendermint/tendermint/issues/3435 -timeout_broadcast_tx_commit = "10s" - -# Maximum size of request body, in bytes -max_body_bytes = 1000000 - -# Maximum size of request header, in bytes -max_header_bytes = 1048576 - -# The path to a file containing certificate that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. -# If the certificate is signed by a certificate authority, -# the certFile should be the concatenation of the server's certificate, any intermediates, -# and the CA's certificate. -# NOTE: both tls_cert_file and tls_key_file must be present for Tendermint to create HTTPS server. -# Otherwise, HTTP server is run. -tls_cert_file = "" - -# The path to a file containing matching private key that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. -# NOTE: both tls-cert-file and tls-key-file must be present for Tendermint to create HTTPS server. -# Otherwise, HTTP server is run. -tls_key_file = "" - -# pprof listen address (https://golang.org/pkg/net/http/pprof) -pprof_laddr = "localhost:6060" - -####################################################### -### P2P Configuration Options ### -####################################################### -[p2p] - -# Address to listen for incoming connections -laddr = "tcp://0.0.0.0:26656" - -# Address to advertise to peers for them to dial -# If empty, will use the same port as the laddr, -# and will introspect on the listener or use UPnP -# to figure out the address. ip and port are required -# example: 159.89.10.97:26656 -external_address = "" - -# Comma separated list of seed nodes to connect to -seeds = "" - -# Comma separated list of nodes to keep persistent connections to -persistent_peers = "" - -# UPNP port forwarding -upnp = false - -# Path to address book -addr_book_file = "config/addrbook.json" - -# Set true for strict address routability rules -# Set false for private or local networks -addr_book_strict = true - -# Maximum number of inbound peers -max_num_inbound_peers = 40 - -# Maximum number of outbound peers to connect to, excluding persistent peers -max_num_outbound_peers = 10 - -# List of node IDs, to which a connection will be (re)established ignoring any existing limits -unconditional_peer_ids = "" - -# Maximum pause when redialing a persistent peer (if zero, exponential backoff is used) -persistent_peers_max_dial_period = "0s" - -# Time to wait before flushing messages out on the connection -flush_throttle_timeout = "100ms" - -# Maximum size of a message packet payload, in bytes -max_packet_msg_payload_size = 1024 - -# Rate at which packets can be sent, in bytes/second -send_rate = 5120000 - -# Rate at which packets can be received, in bytes/second -recv_rate = 5120000 - -# Set true to enable the peer-exchange reactor -pex = true - -# Seed mode, in which node constantly crawls the network and looks for -# peers. If another node asks it for addresses, it responds and disconnects. -# -# Does not work if the peer-exchange reactor is disabled. -seed_mode = false - -# Comma separated list of peer IDs to keep private (will not be gossiped to other peers) -private_peer_ids = "" - -# Toggle to disable guard against peers connecting from the same ip. -allow_duplicate_ip = false - -# Peer connection configuration. -handshake_timeout = "20s" -dial_timeout = "3s" - -####################################################### -### Mempool Configuration Option ### -####################################################### -[mempool] - -# Mempool version to use: -# 1) "v0" - (default) FIFO mempool. -# 2) "v1" - prioritized mempool. -version = "v0" - -recheck = true -broadcast = true -wal_dir = "" - -# Maximum number of transactions in the mempool -size = 5000 - -# Limit the total size of all txs in the mempool. -# This only accounts for raw transactions (e.g. given 1MB transactions and -# max_txs_bytes=5MB, mempool will only accept 5 transactions). -max_txs_bytes = 1073741824 - -# Size of the cache (used to filter transactions we saw earlier) in transactions -cache_size = 10000 - -# Do not remove invalid transactions from the cache (default: false) -# Set to true if it's not possible for any invalid transaction to become valid -# again in the future. -keep-invalid-txs-in-cache = false - -# Maximum size of a single transaction. -# NOTE: the max size of a tx transmitted over the network is {max_tx_bytes}. -max_tx_bytes = 1048576 - -# Maximum size of a batch of transactions to send to a peer -# Including space needed by encoding (one varint per transaction). -# XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796 -max_batch_bytes = 0 - -# ttl-duration, if non-zero, defines the maximum amount of time a transaction -# can exist for in the mempool. -# -# Note, if ttl-num-blocks is also defined, a transaction will be removed if it -# has existed in the mempool at least ttl-num-blocks number of blocks or if it's -# insertion time into the mempool is beyond ttl-duration. -ttl-duration = "0s" - -# ttl-num-blocks, if non-zero, defines the maximum number of blocks a transaction -# can exist for in the mempool. -# -# Note, if ttl-duration is also defined, a transaction will be removed if it -# has existed in the mempool at least ttl-num-blocks number of blocks or if -# it's insertion time into the mempool is beyond ttl-duration. -ttl-num-blocks = 0 - -####################################################### -### State Sync Configuration Options ### -####################################################### -[statesync] -# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine -# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in -# the network to take and serve state machine snapshots. State sync is not attempted if the node -# has any local state (LastBlockHeight > 0). The node will have a truncated block history, -# starting from the height of the snapshot. -enable = false - -# RPC servers (comma-separated) for light client verification of the synced state machine and -# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding -# header hash obtained from a trusted source, and a period during which validators can be trusted. -# -# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2 -# weeks) during which they can be financially punished (slashed) for misbehavior. -rpc_servers = "" -trust_height = 0 -trust_hash = "" -trust_period = "168h0m0s" - -# Time to spend discovering snapshots before initiating a restore. -discovery_time = "15s" - -# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp). -# Will create a new, randomly named directory within, and remove it when done. -temp_dir = "" - -# The timeout duration before re-requesting a chunk, possibly from a different -# peer (default: 1 minute). -chunk_request_timeout = "10s" - -# The number of concurrent chunk fetchers to run (default: 1). -chunk_fetchers = "4" - -####################################################### -### Fast Sync Configuration Connections ### -####################################################### -[fastsync] - -# Fast Sync version to use: -# 1) "v0" (default) - the legacy fast sync implementation -# 2) "v1" - refactor of v0 version for better testability -# 2) "v2" - complete redesign of v0, optimized for testability & readability -version = "v0" - -####################################################### -### Consensus Configuration Options ### -####################################################### -[consensus] - -wal_file = "data/cs.wal/wal" - -# How long we wait for a proposal block before prevoting nil -timeout_propose = "3s" -# How much timeout_propose increases with each round -timeout_propose_delta = "500ms" -# How long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil) -timeout_prevote = "1s" -# How much the timeout_prevote increases with each round -timeout_prevote_delta = "500ms" -# How long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil) -timeout_precommit = "1s" -# How much the timeout_precommit increases with each round -timeout_precommit_delta = "500ms" -# How long we wait after committing a block, before starting on the new -# height (this gives us a chance to receive some more precommits, even -# though we already have +2/3). -timeout_commit = "1s" - -# How many blocks to look back to check existence of the node's consensus votes before joining consensus -# When non-zero, the node will panic upon restart -# if the same consensus key was used to sign {double_sign_check_height} last blocks. -# So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic. -double_sign_check_height = 0 - -# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0) -skip_timeout_commit = false - -# EmptyBlocks mode and possible interval between empty blocks -create_empty_blocks = true -create_empty_blocks_interval = "0s" - -# Reactor sleep duration parameters -peer_gossip_sleep_duration = "100ms" -peer_query_maj23_sleep_duration = "2s" - -####################################################### -### Storage Configuration Options ### -####################################################### -[storage] - -# Set to true to discard ABCI responses from the state store, which can save a -# considerable amount of disk space. Set to false to ensure ABCI responses are -# persisted. ABCI responses are required for /block_results RPC queries, and to -# reindex events in the command-line tool. -discard_abci_responses = false - -####################################################### -### Transaction Indexer Configuration Options ### -####################################################### -[tx_index] - -# What indexer to use for transactions -# -# The application will set which txs to index. In some cases a node operator will be able -# to decide which txs to index based on configuration set in the application. -# -# Options: -# 1) "null" -# 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). -# - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed. -# 3) "psql" - the indexer services backed by PostgreSQL. -# When "kv" or "psql" is chosen "tx.height" and "tx.hash" will always be indexed. -indexer = "kv" - -# The PostgreSQL connection configuration, the connection format: -# postgresql://:@:/? -psql-conn = "" - -####################################################### -### Instrumentation Configuration Options ### -####################################################### -[instrumentation] - -# When true, Prometheus metrics are served under /metrics on -# PrometheusListenAddr. -# Check out the documentation for the list of available metrics. -prometheus = false - -# Address to listen for Prometheus collector(s) connections -prometheus_listen_addr = ":26660" - -# Maximum number of simultaneous connections. -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -max_open_connections = 3 - -# Instrumentation namespace -namespace = "tendermint" diff --git a/tests/e2e/generated/kava-1/config/genesis.json b/tests/e2e/generated/kava-1/config/genesis.json deleted file mode 100644 index d88ca888..00000000 --- a/tests/e2e/generated/kava-1/config/genesis.json +++ /dev/null @@ -1,3027 +0,0 @@ -{ - "genesis_time": "2023-02-28T20:05:58.764023Z", - "chain_id": "kavalocalnet_8888-1", - "initial_height": "1", - "consensus_params": { - "block": { - "max_bytes": "22020096", - "max_gas": "-1", - "time_iota_ms": "1000" - }, - "evidence": { - "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000", - "max_bytes": "1048576" - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": {} - }, - "app_hash": "", - "app_state": { - "auction": { - "next_auction_id": "1", - "params": { - "max_auction_duration": "172800s", - "forward_bid_duration": "28800s", - "reverse_bid_duration": "3600s", - "increment_surplus": "0.050000000000000000", - "increment_debt": "0.050000000000000000", - "increment_collateral": "0.050000000000000000" - }, - "auctions": [] - }, - "auth": { - "params": { - "max_memo_characters": "256", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - }, - "accounts": [ - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1ypjp0m04pyp73hwgtc0dgkx0e9rrydecm054da", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1agcvt07tcw0tglu0hmwdecsnuxp2yd45f3avgm", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1g33w0mh4mjllhaj3y4dcwkwquxgwrma9ga5t94", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1kla4wl0ccv7u85cemvs3y987hqk0afcv7vue84", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1ynf22ap74j6znl503a56y23x5stfr0aw5kntp8", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava14q5sawxdxtpap5x5sgzj7v4sp3ucncjlpuk3hs", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1z3ytjpr6ancl8gw80z6f47z9smug7986x29vtj", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1j9je7f6s0v6k7dmgv6u5k5ru202f5ffsc7af04", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1ektgdyy0z23qqnd67ns3qvfzgfgjd5xe82lf5c", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1sw54s6gq76acm35ls6m5c0kr93dstgrh6eftld", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1t4dvu32e309pzhmdn3aqcjlj79h9876plynrfm", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava1wuzhkn2f8nqe2aprnwt3jkjvvr9m7dlkpumtz2", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "account_number": "0", - "address": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "pub_key": null, - "sequence": "0" - }, - { - "@type": "/cosmos.vesting.v1beta1.PeriodicVestingAccount", - "base_vesting_account": { - "base_account": { - "account_number": "0", - "address": "kava1fwfwmt6vupf3m9uvpdsuuc4dga8p5dtl4npcqz", - "pub_key": null, - "sequence": "0" - }, - "delegated_free": [], - "delegated_vesting": [], - "end_time": "1696540229", - "original_vesting": [ - { - "amount": "5000000000", - "denom": "ukava" - } - ] - }, - "start_time": "1665004229", - "vesting_periods": [ - { - "amount": [ - { - "amount": "5000000000", - "denom": "ukava" - } - ], - "length": "31536000" - } - ] - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "kava1q0dkky0505r555etn6u2nz4h4kjcg5y8dg863a", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "kava1ak4pa9z2aty94ze2cs06wsdnkg9hsvfkp40r02", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "kava123fxg0l602etulhhcdm0vt7l57qya5wjcrwhzz", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "kava10wlnqzyss4accfqmyxwx5jy5x9nfkwh6qm7n4t", - "pub_key": null, - "account_number": "0", - "sequence": "3" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "kava15tmj37vh7ch504px9fcfglmvx6y9m70646ev8t", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "account_number": "41", - "address": "kava1afcspmdzlqzn2c53krj4mt2yskv6wtrds2jqht", - "pub_key": null, - "sequence": "1" - }, - "code_hash": "0x45d85d503e0143ffd2bb95d7bcb4dadfc1c05ff005fc7c26e63eb47f496fdafc" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "account_number": "0", - "address": "kava1vtf08rd2z9fm8qwxa54y3el5vues8ty64qcdyr", - "pub_key": null, - "sequence": "1" - }, - "code_hash": "0xefe54230c8a74092194afdcb21c230b4cc4e07d0e6cd22bf0d3721f518df8ef2" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "account_number": "0", - "address": "kava1wrrekcy2h0zs9shkruuwqsvsldq8hm70yad4ke", - "pub_key": null, - "sequence": "1" - }, - "code_hash": "0xd51cf04c1b78bc48b348e8455c4181539ab0b7ff84bb081fed109cd5feafaede" - } - ] - }, - "authz": { - "authorization": [] - }, - "bank": { - "params": { - "send_enabled": [], - "default_send_enabled": true - }, - "balances": [ - { - "address": "kava1q0dkky0505r555etn6u2nz4h4kjcg5y8dg863a", - "coins": [ - { - "denom": "bkava-kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42", - "amount": "10000000000000000" - }, - { - "denom": "bnb", - "amount": "10000000000000000" - }, - { - "denom": "btcb", - "amount": "10000000000000000" - }, - { - "denom": "busd", - "amount": "10000000000000000" - }, - { - "denom": "hard", - "amount": "1000000000000000000" - }, - { - "denom": "swp", - "amount": "1000000000000000000" - }, - { - "denom": "ukava", - "amount": "1000000000000" - }, - { - "denom": "usdx", - "amount": "10000000000000000" - }, - { - "denom": "xrpb", - "amount": "10000000000000000" - } - ] - }, - { - "address": "kava1z3ytjpr6ancl8gw80z6f47z9smug7986x29vtj", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1ypjp0m04pyp73hwgtc0dgkx0e9rrydecm054da", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000" - } - ] - }, - { - "address": "kava1ynf22ap74j6znl503a56y23x5stfr0aw5kntp8", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1g33w0mh4mjllhaj3y4dcwkwquxgwrma9ga5t94", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1fwfwmt6vupf3m9uvpdsuuc4dga8p5dtl4npcqz", - "coins": [ - { - "denom": "ukava", - "amount": "10000000000" - } - ] - }, - { - "address": "kava123fxg0l602etulhhcdm0vt7l57qya5wjcrwhzz", - "coins": [ - { - "denom": "bnb", - "amount": "100000000000" - }, - { - "denom": "ukava", - "amount": "1000000000" - } - ] - }, - { - "address": "kava1t4dvu32e309pzhmdn3aqcjlj79h9876plynrfm", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "coins": [ - { - "denom": "bkava-kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42", - "amount": "10000000000000000" - }, - { - "denom": "bnb", - "amount": "10000000000000000" - }, - { - "denom": "btcb", - "amount": "10000000000000000" - }, - { - "denom": "busd", - "amount": "10000000000000000" - }, - { - "denom": "hard", - "amount": "1000000000000000000" - }, - { - "denom": "swp", - "amount": "1000000000000000000" - }, - { - "denom": "ukava", - "amount": "1000000000000" - }, - { - "denom": "usdx", - "amount": "10000000000000000" - }, - { - "denom": "xrpb", - "amount": "10000000000000000" - } - ] - }, - { - "address": "kava1wuzhkn2f8nqe2aprnwt3jkjvvr9m7dlkpumtz2", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava10wlnqzyss4accfqmyxwx5jy5x9nfkwh6qm7n4t", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000" - } - ] - }, - { - "address": "kava1sw54s6gq76acm35ls6m5c0kr93dstgrh6eftld", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1j9je7f6s0v6k7dmgv6u5k5ru202f5ffsc7af04", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava15tmj37vh7ch504px9fcfglmvx6y9m70646ev8t", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000" - } - ] - }, - { - "address": "kava14q5sawxdxtpap5x5sgzj7v4sp3ucncjlpuk3hs", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1kla4wl0ccv7u85cemvs3y987hqk0afcv7vue84", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1cj7njkw2g9fqx4e768zc75dp9sks8u9znxrf0w", - "coins": [ - { - "denom": "hard", - "amount": "1000000000000" - }, - { - "denom": "swp", - "amount": "1000000000000" - }, - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1ektgdyy0z23qqnd67ns3qvfzgfgjd5xe82lf5c", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1mfru9azs5nua2wxcd4sq64g5nt7nn4n8s2w8cu", - "coins": [ - { - "denom": "btcb", - "amount": "200000000" - }, - { - "denom": "hard", - "amount": "1000000000" - }, - { - "denom": "swp", - "amount": "5000000000" - }, - { - "denom": "ukava", - "amount": "5000000000" - }, - { - "denom": "usdx", - "amount": "103000000000" - } - ] - }, - { - "address": "kava1agcvt07tcw0tglu0hmwdecsnuxp2yd45f3avgm", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava1ak4pa9z2aty94ze2cs06wsdnkg9hsvfkp40r02", - "coins": [ - { - "denom": "bnb", - "amount": "100000000000" - }, - { - "denom": "ukava", - "amount": "2000000000" - } - ] - }, - { - "address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "coins": [ - { - "denom": "ukava", - "amount": "1000000000000" - } - ] - }, - { - "address": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "coins": [ - { - "denom": "bkava-kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42", - "amount": "10000000000000000" - }, - { - "denom": "bnb", - "amount": "10000000000000000" - }, - { - "denom": "btcb", - "amount": "10000000000000000" - }, - { - "denom": "busd", - "amount": "10000000000000000" - }, - { - "denom": "hard", - "amount": "1000000000000000000" - }, - { - "denom": "swp", - "amount": "1000000000000000000" - }, - { - "denom": "ukava", - "amount": "1000000000000" - }, - { - "denom": "usdx", - "amount": "10000000000000000" - }, - { - "denom": "xrpb", - "amount": "10000000000000000" - } - ] - } - ], - "supply": [], - "denom_metadata": [] - }, - "bep3": { - "params": { - "asset_params": [ - { - "denom": "btcb", - "coin_id": "0", - "supply_limit": { - "limit": "100000000000", - "time_limited": false, - "time_period": "0", - "time_based_limit": "0" - }, - "active": true, - "deputy_address": "kava1kla4wl0ccv7u85cemvs3y987hqk0afcv7vue84", - "fixed_fee": "2", - "min_swap_amount": "3", - "max_swap_amount": "2000000000", - "min_block_lock": "24686", - "max_block_lock": "86400" - }, - { - "denom": "xrpb", - "coin_id": "144", - "supply_limit": { - "limit": "2000000000000000", - "time_limited": false, - "time_period": "0", - "time_based_limit": "0" - }, - "active": true, - "deputy_address": "kava14q5sawxdxtpap5x5sgzj7v4sp3ucncjlpuk3hs", - "fixed_fee": "100000", - "min_swap_amount": "100001", - "max_swap_amount": "250000000000000", - "min_block_lock": "24686", - "max_block_lock": "86400" - }, - { - "denom": "bnb", - "coin_id": "714", - "supply_limit": { - "limit": "100000000000000", - "time_limited": false, - "time_period": "0", - "time_based_limit": "0" - }, - "active": true, - "deputy_address": "kava1agcvt07tcw0tglu0hmwdecsnuxp2yd45f3avgm", - "fixed_fee": "1000", - "min_swap_amount": "1001", - "max_swap_amount": "500000000000", - "min_block_lock": "24686", - "max_block_lock": "86400" - }, - { - "denom": "busd", - "coin_id": "727", - "supply_limit": { - "limit": "2000000000000000", - "time_limited": false, - "time_period": "0", - "time_based_limit": "0" - }, - "active": true, - "deputy_address": "kava1j9je7f6s0v6k7dmgv6u5k5ru202f5ffsc7af04", - "fixed_fee": "20000", - "min_swap_amount": "20001", - "max_swap_amount": "100000000000000", - "min_block_lock": "24686", - "max_block_lock": "86400" - } - ] - }, - "atomic_swaps": [], - "supplies": [], - "previous_block_time": "1970-01-01T00:00:01Z" - }, - "capability": { - "index": "1", - "owners": [] - }, - "cdp": { - "params": { - "collateral_params": [ - { - "auction_size": "50000000000", - "conversion_factor": "8", - "debt_limit": { - "amount": "20000000000000", - "denom": "usdx" - }, - "denom": "bnb", - "liquidation_market_id": "bnb:usd:30", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "bnb:usd", - "stability_fee": "1.000000000782997700", - "type": "bnb-a" - }, - { - "auction_size": "100000000", - "conversion_factor": "8", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "btcb", - "liquidation_market_id": "btc:usd:30", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "btc:usd", - "stability_fee": "1.000000000782997700", - "type": "btcb-a" - }, - { - "denom": "xrpb", - "type": "xrpb-a", - "liquidation_ratio": "1.500000000000000000", - "debt_limit": { - "denom": "usdx", - "amount": "1000000000000" - }, - "stability_fee": "1.000000001547125958", - "auction_size": "100000000000", - "liquidation_penalty": "0.075000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "xrp:usd", - "liquidation_market_id": "xrp:usd:30", - "conversion_factor": "8" - }, - { - "denom": "busd", - "type": "busd-a", - "liquidation_ratio": "1.010000000000000000", - "debt_limit": { - "denom": "usdx", - "amount": "3000000000000" - }, - "stability_fee": "1.000000000000000000", - "auction_size": "1000000000000", - "liquidation_penalty": "0.075000000000000000", - "check_collateralization_index_count": "10", - "keeper_reward_percentage": "0.01", - "spot_market_id": "busd:usd", - "liquidation_market_id": "busd:usd:30", - "conversion_factor": "8" - }, - { - "denom": "busd", - "type": "busd-b", - "liquidation_ratio": "1.100000000000000000", - "debt_limit": { - "denom": "usdx", - "amount": "3000000000000" - }, - "stability_fee": "1.000000012857214317", - "auction_size": "1000000000000", - "liquidation_penalty": "0.075000000000000000", - "check_collateralization_index_count": "10", - "keeper_reward_percentage": "0.01", - "spot_market_id": "busd:usd", - "liquidation_market_id": "busd:usd:30", - "conversion_factor": "8" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "ukava", - "liquidation_market_id": "kava:usd:30", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "kava:usd", - "stability_fee": "1.000000000782997700", - "type": "ukava-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2", - "liquidation_market_id": "luna:usd:30", - "spot_market_id": "luna:usd", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "stability_fee": "1.000000000782997700", - "type": "luna-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5", - "liquidation_market_id": "akt:usd:30", - "spot_market_id": "akt:usd", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "stability_fee": "1.000000000782997700", - "type": "akt-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "liquidation_market_id": "osmo:usd:30", - "spot_market_id": "osmo:usd", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "stability_fee": "1.000000000782997700", - "type": "osmo-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "liquidation_market_id": "atom:usd:30", - "spot_market_id": "atom:usd", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "stability_fee": "1.000000000782997700", - "type": "atom-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "hard", - "liquidation_market_id": "hard:usd:30", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "hard:usd", - "stability_fee": "1.000000000782997700", - "type": "hard-a" - }, - { - "auction_size": "50000000000", - "conversion_factor": "6", - "debt_limit": { - "amount": "2000000000000", - "denom": "usdx" - }, - "denom": "swp", - "liquidation_market_id": "swp:usd:30", - "liquidation_penalty": "0.050000000000000000", - "liquidation_ratio": "1.500000000000000000", - "keeper_reward_percentage": "0.01", - "check_collateralization_index_count": "10", - "spot_market_id": "swp:usd", - "stability_fee": "1.000000000782997700", - "type": "swp-a" - }, - { - "denom": "hbtc", - "type": "hbtc-a", - "liquidation_ratio": "1.500000000000000000", - "debt_limit": { - "denom": "usdx", - "amount": "10000000000000" - }, - "stability_fee": "1.000000001547125958", - "auction_size": "1000000000000", - "liquidation_penalty": "0.075000000000000000", - "check_collateralization_index_count": "10", - "keeper_reward_percentage": "0.01", - "spot_market_id": "btc:usd", - "liquidation_market_id": "btc:usd:30", - "conversion_factor": "8" - } - ], - "debt_param": { - "denom": "usdx", - "reference_asset": "usd", - "conversion_factor": "6", - "debt_floor": "10000000" - }, - "global_debt_limit": { - "denom": "usdx", - "amount": "53000000000000" - }, - "surplus_auction_threshold": "500000000000", - "surplus_auction_lot": "10000000000", - "debt_auction_threshold": "100000000000", - "debt_auction_lot": "10000000000", - "circuit_breaker": false - }, - "cdps": [], - "deposits": [], - "starting_cdp_id": "1", - "debt_denom": "debt", - "gov_denom": "ukava", - "previous_accumulation_times": [], - "total_principals": [] - }, - "committee": { - "next_proposal_id": "1", - "committees": [ - { - "@type": "/kava.committee.v1beta1.MemberCommittee", - "base_committee": { - "id": "1", - "description": "Kava Stability Committee", - "members": [ - "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag" - ], - "permissions": [ - { - "@type": "/kava.committee.v1beta1.TextPermission" - }, - { - "@type": "/kava.committee.v1beta1.ParamsChangePermission", - "allowed_params_changes": [ - { - "subspace": "auction", - "key": "BidDuration" - }, - { - "subspace": "auction", - "key": "IncrementSurplus" - }, - { - "subspace": "auction", - "key": "IncrementDebt" - }, - { - "subspace": "auction", - "key": "IncrementCollateral" - }, - { - "subspace": "bep3", - "key": "AssetParams" - }, - { - "subspace": "cdp", - "key": "GlobalDebtLimit" - }, - { - "subspace": "cdp", - "key": "SurplusThreshold" - }, - { - "subspace": "cdp", - "key": "SurplusLot" - }, - { - "subspace": "cdp", - "key": "DebtThreshold" - }, - { - "subspace": "cdp", - "key": "DebtLot" - }, - { - "subspace": "cdp", - "key": "DistributionFrequency" - }, - { - "subspace": "cdp", - "key": "CollateralParams" - }, - { - "subspace": "cdp", - "key": "DebtParam" - }, - { - "subspace": "incentive", - "key": "Active" - }, - { - "subspace": "kavadist", - "key": "Active" - }, - { - "subspace": "pricefeed", - "key": "Markets" - }, - { - "subspace": "hard", - "key": "MoneyMarkets" - }, - { - "subspace": "hard", - "key": "MinimumBorrowUSDValue" - } - ] - } - ], - "vote_threshold": "0.667000000000000000", - "proposal_duration": "604800s", - "tally_option": "TALLY_OPTION_FIRST_PAST_THE_POST" - } - }, - { - "@type": "/kava.committee.v1beta1.MemberCommittee", - "base_committee": { - "id": "2", - "description": "Kava Safety Committee", - "members": [ - "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag" - ], - "permissions": [ - { - "@type": "/kava.committee.v1beta1.SoftwareUpgradePermission" - } - ], - "vote_threshold": "0.667000000000000000", - "proposal_duration": "604800s", - "tally_option": "TALLY_OPTION_FIRST_PAST_THE_POST" - } - }, - { - "@type": "/kava.committee.v1beta1.MemberCommittee", - "base_committee": { - "id": "3", - "description": "Kava God Committee (testing only)", - "members": [ - "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag" - ], - "permissions": [ - { - "@type": "/kava.committee.v1beta1.GodPermission" - } - ], - "vote_threshold": "0.667000000000000000", - "proposal_duration": "604800s", - "tally_option": "TALLY_OPTION_FIRST_PAST_THE_POST" - } - }, - { - "@type": "/kava.committee.v1beta1.TokenCommittee", - "base_committee": { - "id": "4", - "description": "HARD Governance Committee", - "members": [ - "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag" - ], - "permissions": [ - { - "@type": "/kava.committee.v1beta1.TextPermission" - }, - { - "@type": "/kava.committee.v1beta1.ParamsChangePermission", - "allowed_params_changes": [ - { - "subspace": "hard", - "key": "MoneyMarkets" - }, - { - "subspace": "hard", - "key": "MinimumBorrowUSDValue" - }, - { - "subspace": "incentive", - "key": "HardSupplyRewardPeriods" - }, - { - "subspace": "incentive", - "key": "HardBorrowRewardPeriods" - }, - { - "subspace": "incentive", - "key": "HardDelegatorRewardPeriods" - } - ] - } - ], - "vote_threshold": "0.667000000000000000", - "proposal_duration": "604800s", - "tally_option": "TALLY_OPTION_DEADLINE" - }, - "quorum": "0.330000000000000000", - "tally_denom": "hard" - }, - { - "@type": "/kava.committee.v1beta1.TokenCommittee", - "base_committee": { - "id": "5", - "description": "SWP Governance Committee", - "members": [ - "kava1n96qpdfcz2m7y364ewk8srv9zuq6ucwduyjaag" - ], - "permissions": [ - { - "@type": "/kava.committee.v1beta1.TextPermission" - }, - { - "@type": "/kava.committee.v1beta1.ParamsChangePermission", - "allowed_params_changes": [ - { - "subspace": "swap", - "key": "AllowedPools" - }, - { - "subspace": "swap", - "key": "SwapFee" - }, - { - "subspace": "incentive", - "key": "DelegatorRewardPeriods" - }, - { - "subspace": "incentive", - "key": "SwapRewardPeriods" - } - ] - } - ], - "vote_threshold": "0.667000000000000000", - "proposal_duration": "604800s", - "tally_option": "TALLY_OPTION_DEADLINE" - }, - "quorum": "0.330000000000000000", - "tally_denom": "swp" - } - ], - "proposals": [], - "votes": [] - }, - "community": {}, - "crisis": { - "constant_fee": { - "denom": "ukava", - "amount": "1000" - } - }, - "distribution": { - "params": { - "community_tax": "0.000000000000000000", - "base_proposer_reward": "0.010000000000000000", - "bonus_proposer_reward": "0.040000000000000000", - "withdraw_addr_enabled": true - }, - "fee_pool": { - "community_pool": [] - }, - "delegator_withdraw_infos": [], - "previous_proposer": "", - "outstanding_rewards": [], - "validator_accumulated_commissions": [], - "validator_historical_rewards": [], - "validator_current_rewards": [], - "delegator_starting_infos": [], - "validator_slash_events": [] - }, - "earn": { - "params": { - "allowed_vaults": [ - { - "denom": "usdx", - "strategies": [ - "STRATEGY_TYPE_HARD" - ] - }, - { - "denom": "ukava", - "strategies": [ - "STRATEGY_TYPE_SAVINGS" - ] - }, - { - "denom": "bkava", - "strategies": [ - "STRATEGY_TYPE_SAVINGS" - ] - }, - { - "denom": "erc20/multichain/usdc", - "strategies": [ - "STRATEGY_TYPE_SAVINGS" - ] - } - ] - }, - "vault_records": [], - "vault_share_records": [] - }, - "evidence": { - "evidence": [] - }, - "evm": { - "accounts": [ - { - "address": "0xeA7100edA2f805356291B0E55DaD448599a72C6d", - "code": "608060405234801561001057600080fd5b50600436106102695760003560e01c806379cc679011610151578063a457c2d7116100c3578063d539139311610087578063d5391393146105df578063d547741f146105f4578063dd62ed3e14610607578063e44dbafc14610640578063ec126c7714610667578063ed56531a1461067a57600080fd5b8063a457c2d71461056c578063a9059cbb1461057f578063b32ad1a614610592578063c8e1b4ce146105b9578063ca15c873146105cc57600080fd5b806395d89b411161011557806395d89b41146104ff5780639ac25d08146105075780639dc29fac1461050f5780639e9e466614610522578063a19ff68014610545578063a217fddf1461050757600080fd5b806379cc679014610474578063893d20e8146104875780639010d07c1461048f57806391d14854146104a257806395609212146104b557600080fd5b8063313ce567116101ea578063401d1c73116101ae578063401d1c73146103e457806340c10f19146103f757806342966c681461040a578063628d6cba1461041d5780636f307dc31461043057806370a082311461044b57600080fd5b8063313ce56714610354578063355274ea1461038557806335e1d487146103ab57806336568abe146103be57806339509351146103d157600080fd5b806323fb9eba1161023157806323fb9eba146102e3578063248a9ca3146102f85780632f2ff15d1461031b5780632f4dae9f1461032e5780633092afd51461034157600080fd5b806301ffc9a71461026e57806306fdde0314610296578063095ea7b3146102ab57806318160ddd146102be57806323b872dd146102d0575b600080fd5b61028161027c366004611e25565b61068d565b60405190151581526020015b60405180910390f35b61029e6106b8565b60405161028d9190611e7b565b6102816102b9366004611eca565b61074a565b6002545b60405190815260200161028d565b6102816102de366004611ef4565b610762565b6102f66102f1366004611eca565b610786565b005b6102c2610306366004611f30565b60009081526005602052604090206001015490565b6102f6610329366004611f49565b6107ec565b6102f661033c366004611f30565b610817565b6102f661034f366004611f75565b610830565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000616815260200161028d565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e40000006102c2565b6102f66103b9366004611f90565b610876565b6102f66103cc366004611f49565b6108de565b6102816103df366004611eca565b610958565b6102f66103f2366004611fd5565b610997565b610281610405366004611eca565b6109e0565b6102f6610418366004611f30565b610a05565b61028161042b366004611f49565b610a12565b60005b6040516001600160a01b03909116815260200161028d565b6102c2610459366004611f75565b6001600160a01b031660009081526020819052604090205490565b6102f6610482366004611eca565b610ab1565b610433610ac6565b61043361049d366004612008565b610ad7565b6102816104b0366004611f49565b610af6565b6104e46104c3366004611f75565b60086020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161028d565b61029e610b21565b6102c2600081565b61028161051d366004611eca565b610b30565b610281610530366004611f30565b60009081526007602052604090205460ff1690565b6102c27f62d52416825983abd68b16e092b60c2eac31fd673bcce92494e063af530d9c3081565b61028161057a366004611eca565b610b55565b61028161058d366004611eca565b610be7565b6102c27fb2a18ae5d0b623b41098012c516d0bf4bef38c068c9e397da870c290888b199981565b6102f66105c7366004611eca565b610bf5565b6102c26105da366004611f30565b610c55565b6102c260008051602061220b83398151915281565b6102f6610602366004611f49565b610c6c565b6102c261061536600461202a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c27f38cbe5ebce66f5e289a042a8eda57d146aaab8a3f3a9637670043b23d481307081565b610281610675366004612054565b610c92565b6102f6610688366004611f30565b610d06565b60006001600160e01b03198216635a05180f60e01b14806106b257506106b282610db6565b92915050565b6060600380546106c790612079565b80601f01602080910402602001604051908101604052809291908181526020018280546106f390612079565b80156107405780601f1061071557610100808354040283529160200191610740565b820191906000526020600020905b81548152906001019060200180831161072357829003601f168201915b5050505050905090565b600033610758818585610deb565b5060019392505050565b600033610770858285610f0f565b61077b858585610fa1565b506001949350505050565b6000610792813361117a565b6107aa60008051602061220b83398151915284610af6565b6107cf5760405162461bcd60e51b81526004016107c6906120b4565b60405180910390fd5b506001600160a01b03909116600090815260086020526040902055565b600082815260056020526040902060010154610808813361117a565b61081283836111de565b505050565b6000610823813361117a565b61082c82611200565b5050565b600061083c813361117a565b61085460008051602061220b833981519152836112e9565b506001600160a01b031660009081526008602052604081206001810182905555565b6000610882813361117a565b81806108a157506108a160008051602061220b83398151915285610af6565b6108bd5760405162461bcd60e51b81526004016107c6906120b4565b50506001600160a01b03909116600090815260086020526040902060020155565b6001600160a01b038116331461094e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107c6565b61082c82826112e9565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061075890829086906109929087906120ee565b610deb565b60006109a3813361117a565b6109bb60008051602061220b833981519152856111de565b506001600160a01b039092166000908152600860205260409020600181019190915555565b600060008051602061220b8339815191526109fb813361117a565b610758848461130b565b610a0f33826114b4565b50565b60006001600160a01b038216610a5e5760405162461bcd60e51b81526020600482015260116024820152707a65726f2062696e64206164647265737360781b60448201526064016107c6565b610a6833846114b4565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c8889060200160405180910390a350600192915050565b610abc823383610f0f565b61082c82826114b4565b6000610ad28180610ad7565b905090565b6000828152600660205260408120610aef908361163b565b9392505050565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546106c790612079565b600060008051602061220b833981519152610b4b813361117a565b61075884846114b4565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610bda5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107c6565b61077b8286868403610deb565b600033610758818585610fa1565b6000610c01813361117a565b610c1960008051602061220b83398151915284610af6565b610c355760405162461bcd60e51b81526004016107c6906120b4565b506001600160a01b03909116600090815260086020526040902060010155565b60008181526006602052604081206106b290611647565b600082815260056020526040902060010154610c88813361117a565b61081283836112e9565b600060008051602061220b833981519152610cad813361117a565b610cb7848461130b565b836001600160a01b0316857f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6185604051610cf391815260200190565b60405180910390a3506001949350505050565b6000610d12813361117a565b61082c82611651565b610d258282610af6565b61082c5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610d5d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610aef836001600160a01b038416611734565b60006001600160e01b03198216637965db0b60e01b14806106b257506301ffc9a760e01b6001600160e01b03198316146106b2565b6001600160a01b038316610e4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107c6565b6001600160a01b038216610eae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107c6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610f9b5781811015610f8e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107c6565b610f9b8484848403610deb565b50505050565b6001600160a01b0383166110055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107c6565b6001600160a01b0382166110675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107c6565b611072838383611783565b6001600160a01b038316600090815260208190526040902054818110156110ea5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107c6565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906111219084906120ee565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161116d91815260200190565b60405180910390a3610f9b565b6111848282610af6565b61082c5761119c816001600160a01b0316601461181e565b6111a783602061181e565b6040516020016111b8929190612106565b60408051601f198184030181529082905262461bcd60e51b82526107c691600401611e7b565b6111e88282610d1b565b60008281526006602052604090206108129082610da1565b600081815260076020526040902054819060ff168061124957506000805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5460ff165b6112955760405162461bcd60e51b815260206004820152601b60248201527f5061757361626c65436f6e74726f6c3a206e6f7420706175736564000000000060448201526064016107c6565b60008281526007602052604090819020805460ff19169055517fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a906112dd9084815260200190565b60405180910390a15050565b6112f382826119ba565b60008281526006602052604090206108129082611a21565b6001600160a01b0382163014156113645760405162461bcd60e51b815260206004820152601c60248201527f666f72626964206d696e7420746f20616464726573732874686973290000000060448201526064016107c6565b7fb2a18ae5d0b623b41098012c516d0bf4bef38c068c9e397da870c290888b199960005260076020527f5696ae725ce2b6df49ae5fc2132a3b5bfbfa3f910a4f4ebf5d914369aee88e285460ff16156113ed5760405162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d081c185d5cd95960aa1b60448201526064016107c6565b33600090815260086020526040902080548211156114435760405162461bcd60e51b81526020600482015260136024820152721b5a5b9d195c881b585e08195e18d959591959606a1b60448201526064016107c6565b8181600201600082825461145791906120ee565b90915550506001810154600282015411156114aa5760405162461bcd60e51b81526020600482015260136024820152721b5a5b9d195c8818d85c08195e18d959591959606a1b60448201526064016107c6565b6108128383611a36565b6001600160a01b03821630141561150d5760405162461bcd60e51b815260206004820152601e60248201527f666f72626964206275726e2066726f6d2061646472657373287468697329000060448201526064016107c6565b7f62d52416825983abd68b16e092b60c2eac31fd673bcce92494e063af530d9c3060005260076020527f22c0851725d81d5a2873b6243c078a2bee0ad249f1327d73347baddfab2bafdf5460ff16156115965760405162461bcd60e51b815260206004820152600b60248201526a189d5c9b881c185d5cd95960aa1b60448201526064016107c6565b6115ae60008051602061220b83398151915233610af6565b156116315733600090815260086020526040902060028101548211156116165760405162461bcd60e51b815260206004820152601b60248201527f6d696e746572206275726e20616d6f756e74206578636565646564000000000060448201526064016107c6565b8181600201600082825461162a919061217b565b9091555050505b61082c8282611ac3565b6000610aef8383611c1d565b60006106b2825490565b600081815260076020526040902054819060ff1615801561169d57506000805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5460ff16155b6116e95760405162461bcd60e51b815260206004820152601760248201527f5061757361626c65436f6e74726f6c3a2070617573656400000000000000000060448201526064016107c6565b60008281526007602052604090819020805460ff19166001179055517f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba31906112dd9084815260200190565b600081815260018301602052604081205461177b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b2565b5060006106b2565b7f38cbe5ebce66f5e289a042a8eda57d146aaab8a3f3a9637670043b23d481307060005260076020527fed3cf84bcbd51c215e74472d803ae179cc7a6cdc7f43fbb4dee24097246f8ede5460ff16156108125760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e207472616e73666572207768696c6520706175736564000000000060448201526064016107c6565b6060600061182d836002612192565b6118389060026120ee565b67ffffffffffffffff811115611850576118506121b1565b6040519080825280601f01601f19166020018201604052801561187a576020820181803683370190505b509050600360fc1b81600081518110611895576118956121c7565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118c4576118c46121c7565b60200101906001600160f81b031916908160001a90535060006118e8846002612192565b6118f39060016120ee565b90505b600181111561196b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611927576119276121c7565b1a60f81b82828151811061193d5761193d6121c7565b60200101906001600160f81b031916908160001a90535060049490941c93611964816121dd565b90506118f6565b508315610aef5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107c6565b6119c48282610af6565b1561082c5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610aef836001600160a01b038416611c47565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081611a6160025490565b611a6b91906120ee565b1115611ab95760405162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a206361702065786365656465640000000000000060448201526064016107c6565b61082c8282611d3a565b6001600160a01b038216611b235760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107c6565b611b2f82600083611783565b6001600160a01b03821660009081526020819052604090205481811015611ba35760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107c6565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611bd290849061217b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000826000018281548110611c3457611c346121c7565b9060005260206000200154905092915050565b60008181526001830160205260408120548015611d30576000611c6b60018361217b565b8554909150600090611c7f9060019061217b565b9050818114611ce4576000866000018281548110611c9f57611c9f6121c7565b9060005260206000200154905080876000018481548110611cc257611cc26121c7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cf557611cf56121f4565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b2565b60009150506106b2565b6001600160a01b038216611d905760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107c6565b611d9c60008383611783565b8060026000828254611dae91906120ee565b90915550506001600160a01b03821660009081526020819052604081208054839290611ddb9084906120ee565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208284031215611e3757600080fd5b81356001600160e01b031981168114610aef57600080fd5b60005b83811015611e6a578181015183820152602001611e52565b83811115610f9b5750506000910152565b6020815260008251806020840152611e9a816040850160208701611e4f565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611ec557600080fd5b919050565b60008060408385031215611edd57600080fd5b611ee683611eae565b946020939093013593505050565b600080600060608486031215611f0957600080fd5b611f1284611eae565b9250611f2060208501611eae565b9150604084013590509250925092565b600060208284031215611f4257600080fd5b5035919050565b60008060408385031215611f5c57600080fd5b82359150611f6c60208401611eae565b90509250929050565b600060208284031215611f8757600080fd5b610aef82611eae565b600080600060608486031215611fa557600080fd5b611fae84611eae565b92506020840135915060408401358015158114611fca57600080fd5b809150509250925092565b600080600060608486031215611fea57600080fd5b611ff384611eae565b95602085013595506040909401359392505050565b6000806040838503121561201b57600080fd5b50508035926020909101359150565b6000806040838503121561203d57600080fd5b61204683611eae565b9150611f6c60208401611eae565b60008060006060848603121561206957600080fd5b83359250611f2060208501611eae565b600181811c9082168061208d57607f821691505b602082108114156120ae57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152693737ba1036b4b73a32b960b11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612101576121016120d8565b500190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161213e816017850160208801611e4f565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161216f816028840160208801611e4f565b01602801949350505050565b60008282101561218d5761218d6120d8565b500390565b60008160001904831182151516156121ac576121ac6120d8565b500290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816121ec576121ec6120d8565b506000190190565b634e487b7160e01b600052603160045260246000fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220cc339a6941d06bc62d9fc1f8b87fe583b29c4485e2b35994fed501f5939dfbff64736f6c634300080a0033", - "storage": [ - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000002", - "value": "0x000000000000000000000000000000000000000000000000000000003b9aca00" - }, - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000003", - "value": "0x55534420436f696e000000000000000000000000000000000000000000000010" - }, - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000004", - "value": "0x5553444300000000000000000000000000000000000000000000000000000008" - }, - { - "key": "0x0f7b334bd042cdf6106f0b03608629c72b3dd9b502867391943cdad165052fd8", - "value": "0x00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000" - }, - { - "key": "0x0f7b334bd042cdf6106f0b03608629c72b3dd9b502867391943cdad165052fd9", - "value": "0x00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000" - }, - { - "key": "0x0f7b334bd042cdf6106f0b03608629c72b3dd9b502867391943cdad165052fda", - "value": "0x000000000000000000000000000000000000000000000000000000003b9aca00" - }, - { - "key": "0x10063f6f476eb36557de3ef096f492b7bd3be08cd7962b61529ef37274c58979", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0x1aed3814bfc23b375c5fbfdef8784e4d0f209df3f52fb56ec3335fc09dade332", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0x2c942ac975ca41e6510f3a38fdd96f840c5923682c849df648463765f8910bb8", - "value": "0x000000000000000000000000000000000000000000000000000000003b9aca00" - }, - { - "key": "0x3195c024b2ddd6d9b8f6c836aa52f67fe69376c8903d009b80229b3ce4425f51", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0x3b88b54959f4503ee0c9a3b506a4cab9144808a26ffb5738a7f73ebfb166a2d0", - "value": "0x0000000000000000000000007bbf300890857b8c241b219c6a489431669b3afa" - }, - { - "key": "0x3ce32fc73819a4967bb4929f14c98e2b8119f4bae7bfa814fa68b54ee5be649d", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0x54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0xb5cfa58595dee30140fb81207e9dab40b17aa1c01eb58fc78d547684f1782e43", - "value": "0x0000000000000000000000000000000000000000000000000000000000000001" - }, - { - "key": "0xf1ca0f4808f7f0c52440675894727c9e66265266cd1e1f5015f8b745ca2de5f3", - "value": "0x0000000000000000000000007bbf300890857b8c241b219c6a489431669b3afa" - } - ] - }, - { - "address": "0x62d2f38dAA1153b381c6ed2A48e7f4673303ac9A", - "code": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806372425d9d1161007157806372425d9d146101a657806386d516e8146101c4578063a8b0574e146101e2578063bce38bd714610200578063c3077fa914610230578063ee82ac5e14610262576100b4565b80630f28c97d146100b9578063252dba42146100d757806327e86d6e14610108578063399542e91461012657806342cbb15c146101585780634d2301cc14610176575b600080fd5b6100c1610292565b6040516100ce91906106a3565b60405180910390f35b6100f160048036038101906100ec91906109d2565b61029a565b6040516100ff929190610b65565b60405180910390f35b610110610423565b60405161011d9190610bae565b60405180910390f35b610140600480360381019061013b9190610c01565b610438565b60405161014f93929190610d6b565b60405180910390f35b610160610457565b60405161016d91906106a3565b60405180910390f35b610190600480360381019061018b9190610da9565b61045f565b60405161019d91906106a3565b60405180910390f35b6101ae610480565b6040516101bb91906106a3565b60405180910390f35b6101cc610488565b6040516101d991906106a3565b60405180910390f35b6101ea610490565b6040516101f79190610de5565b60405180910390f35b61021a60048036038101906102159190610c01565b610498565b6040516102279190610e00565b60405180910390f35b61024a600480360381019061024591906109d2565b610640565b60405161025993929190610d6b565b60405180910390f35b61027c60048036038101906102779190610e4e565b610663565b6040516102899190610bae565b60405180910390f35b600042905090565b60006060439150825167ffffffffffffffff8111156102bc576102bb6106e8565b5b6040519080825280602002602001820160405280156102ef57816020015b60608152602001906001900390816102da5790505b50905060005b835181101561041d5760008085838151811061031457610313610e7b565b5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1686848151811061034957610348610e7b565b5b6020026020010151602001516040516103629190610ee6565b6000604051808303816000865af19150503d806000811461039f576040519150601f19603f3d011682016040523d82523d6000602084013e6103a4565b606091505b5091509150816103e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e090610f5a565b60405180910390fd5b808484815181106103fd576103fc610e7b565b5b60200260200101819052505050808061041590610fa9565b9150506102f5565b50915091565b60006001436104329190610ff2565b40905090565b60008060604392504340915061044e8585610498565b90509250925092565b600043905090565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b600044905090565b600045905090565b600041905090565b6060815167ffffffffffffffff8111156104b5576104b46106e8565b5b6040519080825280602002602001820160405280156104ee57816020015b6104db61066e565b8152602001906001900390816104d35790505b50905060005b82518110156106395760008084838151811061051357610512610e7b565b5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1685848151811061054857610547610e7b565b5b6020026020010151602001516040516105619190610ee6565b6000604051808303816000865af19150503d806000811461059e576040519150601f19603f3d011682016040523d82523d6000602084013e6105a3565b606091505b509150915085156105ef57816105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e590611098565b60405180910390fd5b5b604051806040016040528083151581526020018281525084848151811061061957610618610e7b565b5b60200260200101819052505050808061063190610fa9565b9150506104f4565b5092915050565b6000806060610650600185610438565b8093508194508295505050509193909250565b600081409050919050565b6040518060400160405280600015158152602001606081525090565b6000819050919050565b61069d8161068a565b82525050565b60006020820190506106b86000830184610694565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610720826106d7565b810181811067ffffffffffffffff8211171561073f5761073e6106e8565b5b80604052505050565b60006107526106be565b905061075e8282610717565b919050565b600067ffffffffffffffff82111561077e5761077d6106e8565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107c98261079e565b9050919050565b6107d9816107be565b81146107e457600080fd5b50565b6000813590506107f6816107d0565b92915050565b600080fd5b600067ffffffffffffffff82111561081c5761081b6106e8565b5b610825826106d7565b9050602081019050919050565b82818337600083830152505050565b600061085461084f84610801565b610748565b9050828152602081018484840111156108705761086f6107fc565b5b61087b848285610832565b509392505050565b600082601f830112610898576108976106d2565b5b81356108a8848260208601610841565b91505092915050565b6000604082840312156108c7576108c6610794565b5b6108d16040610748565b905060006108e1848285016107e7565b600083015250602082013567ffffffffffffffff81111561090557610904610799565b5b61091184828501610883565b60208301525092915050565b600061093061092b84610763565b610748565b905080838252602082019050602084028301858111156109535761095261078f565b5b835b8181101561099a57803567ffffffffffffffff811115610978576109776106d2565b5b80860161098589826108b1565b85526020850194505050602081019050610955565b5050509392505050565b600082601f8301126109b9576109b86106d2565b5b81356109c984826020860161091d565b91505092915050565b6000602082840312156109e8576109e76106c8565b5b600082013567ffffffffffffffff811115610a0657610a056106cd565b5b610a12848285016109a4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a81578082015181840152602081019050610a66565b83811115610a90576000848401525b50505050565b6000610aa182610a47565b610aab8185610a52565b9350610abb818560208601610a63565b610ac4816106d7565b840191505092915050565b6000610adb8383610a96565b905092915050565b6000602082019050919050565b6000610afb82610a1b565b610b058185610a26565b935083602082028501610b1785610a37565b8060005b85811015610b535784840389528151610b348582610acf565b9450610b3f83610ae3565b925060208a01995050600181019050610b1b565b50829750879550505050505092915050565b6000604082019050610b7a6000830185610694565b8181036020830152610b8c8184610af0565b90509392505050565b6000819050919050565b610ba881610b95565b82525050565b6000602082019050610bc36000830184610b9f565b92915050565b60008115159050919050565b610bde81610bc9565b8114610be957600080fd5b50565b600081359050610bfb81610bd5565b92915050565b60008060408385031215610c1857610c176106c8565b5b6000610c2685828601610bec565b925050602083013567ffffffffffffffff811115610c4757610c466106cd565b5b610c53858286016109a4565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610c9281610bc9565b82525050565b6000604083016000830151610cb06000860182610c89565b5060208301518482036020860152610cc88282610a96565b9150508091505092915050565b6000610ce18383610c98565b905092915050565b6000602082019050919050565b6000610d0182610c5d565b610d0b8185610c68565b935083602082028501610d1d85610c79565b8060005b85811015610d595784840389528151610d3a8582610cd5565b9450610d4583610ce9565b925060208a01995050600181019050610d21565b50829750879550505050505092915050565b6000606082019050610d806000830186610694565b610d8d6020830185610b9f565b8181036040830152610d9f8184610cf6565b9050949350505050565b600060208284031215610dbf57610dbe6106c8565b5b6000610dcd848285016107e7565b91505092915050565b610ddf816107be565b82525050565b6000602082019050610dfa6000830184610dd6565b92915050565b60006020820190508181036000830152610e1a8184610cf6565b905092915050565b610e2b8161068a565b8114610e3657600080fd5b50565b600081359050610e4881610e22565b92915050565b600060208284031215610e6457610e636106c8565b5b6000610e7284828501610e39565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b6000610ec082610a47565b610eca8185610eaa565b9350610eda818560208601610a63565b80840191505092915050565b6000610ef28284610eb5565b915081905092915050565b600082825260208201905092915050565b7f4d756c746963616c6c206167677265676174653a2063616c6c206661696c6564600082015250565b6000610f44602083610efd565b9150610f4f82610f0e565b602082019050919050565b60006020820190508181036000830152610f7381610f37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fb48261068a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610fe757610fe6610f7a565b5b600182019050919050565b6000610ffd8261068a565b91506110088361068a565b92508282101561101b5761101a610f7a565b5b828203905092915050565b7f4d756c746963616c6c32206167677265676174653a2063616c6c206661696c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611082602183610efd565b915061108d82611026565b604082019050919050565b600060208201905081810360008301526110b181611075565b905091905056fea2646970667358221220abd9cadc14e2f74213535fd9ad887c7bdc5f4ea6aa73d9aedcb1f0513098ea8e64736f6c63430008090033", - "storage": [] - }, - { - "address": "0x70C79B608aBBC502c2F61f38E04190fB407BefCF", - "code": "6080604052600436106100a05760003560e01c8063313ce56711610064578063313ce567146101ad57806370a08231146101d857806395d89b4114610215578063a9059cbb14610240578063d0e30db01461027d578063dd62ed3e14610287576100af565b806306fdde03146100b4578063095ea7b3146100df57806318160ddd1461011c57806323b872dd146101475780632e1a7d4d14610184576100af565b366100af576100ad6102c4565b005b600080fd5b3480156100c057600080fd5b506100c961036a565b6040516100d69190610bbe565b60405180910390f35b3480156100eb57600080fd5b5061010660048036038101906101019190610c79565b6103f8565b6040516101139190610cd4565b60405180910390f35b34801561012857600080fd5b506101316104ea565b60405161013e9190610cfe565b60405180910390f35b34801561015357600080fd5b5061016e60048036038101906101699190610d19565b6104f2565b60405161017b9190610cd4565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a69190610d6c565b6108c2565b005b3480156101b957600080fd5b506101c2610a32565b6040516101cf9190610db5565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190610dd0565b610a45565b60405161020c9190610cfe565b60405180910390f35b34801561022157600080fd5b5061022a610a5d565b6040516102379190610bbe565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190610c79565b610aeb565b6040516102749190610cd4565b60405180910390f35b6102856102c4565b005b34801561029357600080fd5b506102ae60048036038101906102a99190610dfd565b610b00565b6040516102bb9190610cfe565b60405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546103139190610e6c565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516103609190610cfe565b60405180910390a2565b6000805461037790610ef1565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390610ef1565b80156103f05780601f106103c5576101008083540402835291602001916103f0565b820191906000526020600020905b8154815290600101906020018083116103d357829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104d89190610cfe565b60405180910390a36001905092915050565b600047905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90610f6f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561064e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156107a65781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990610fdb565b60405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079e9190610ffb565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107f59190610ffb565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461084b9190610e6c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108af9190610cfe565b60405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90610f6f565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109939190610ffb565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109e0573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610a279190610cfe565b60405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054610a6a90610ef1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690610ef1565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b505050505081565b6000610af83384846104f2565b905092915050565b6004602052816000526040600020602052806000526040600020600091509150505481565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b5f578082015181840152602081019050610b44565b83811115610b6e576000848401525b50505050565b6000601f19601f8301169050919050565b6000610b9082610b25565b610b9a8185610b30565b9350610baa818560208601610b41565b610bb381610b74565b840191505092915050565b60006020820190508181036000830152610bd88184610b85565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c1082610be5565b9050919050565b610c2081610c05565b8114610c2b57600080fd5b50565b600081359050610c3d81610c17565b92915050565b6000819050919050565b610c5681610c43565b8114610c6157600080fd5b50565b600081359050610c7381610c4d565b92915050565b60008060408385031215610c9057610c8f610be0565b5b6000610c9e85828601610c2e565b9250506020610caf85828601610c64565b9150509250929050565b60008115159050919050565b610cce81610cb9565b82525050565b6000602082019050610ce96000830184610cc5565b92915050565b610cf881610c43565b82525050565b6000602082019050610d136000830184610cef565b92915050565b600080600060608486031215610d3257610d31610be0565b5b6000610d4086828701610c2e565b9350506020610d5186828701610c2e565b9250506040610d6286828701610c64565b9150509250925092565b600060208284031215610d8257610d81610be0565b5b6000610d9084828501610c64565b91505092915050565b600060ff82169050919050565b610daf81610d99565b82525050565b6000602082019050610dca6000830184610da6565b92915050565b600060208284031215610de657610de5610be0565b5b6000610df484828501610c2e565b91505092915050565b60008060408385031215610e1457610e13610be0565b5b6000610e2285828601610c2e565b9250506020610e3385828601610c2e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7782610c43565b9150610e8283610c43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610eb757610eb6610e3d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f0957607f821691505b60208210811415610f1d57610f1c610ec2565b5b50919050565b7f574b4156413a20616d6f756e74203c2062616c616e6365000000000000000000600082015250565b6000610f59601783610b30565b9150610f6482610f23565b602082019050919050565b60006020820190508181036000830152610f8881610f4c565b9050919050565b7f574b4156413a20616c6c6f77616e6365203c20616d6f756e7400000000000000600082015250565b6000610fc5601983610b30565b9150610fd082610f8f565b602082019050919050565b60006020820190508181036000830152610ff481610fb8565b9050919050565b600061100682610c43565b915061101183610c43565b92508282101561102457611023610e3d565b5b82820390509291505056fea26469706673582212200c0f9b15327ac79d31169413e421bd27d39e9809f7fd940e8929ed9685f5fa4564736f6c63430008090033", - "storage": [ - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000000", - "value": "0x57726170706564204b6176610000000000000000000000000000000000000018" - }, - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000001", - "value": "0x574b41564100000000000000000000000000000000000000000000000000000a" - }, - { - "key": "0x0000000000000000000000000000000000000000000000000000000000000002", - "value": "0x0000000000000000000000000000000000000000000000000000000000000012" - } - ] - } - ], - "params": { - "evm_denom": "akava", - "enable_create": true, - "enable_call": true, - "extra_eips": [], - "chain_config": { - "homestead_block": "0", - "dao_fork_block": "0", - "dao_fork_support": true, - "eip150_block": "0", - "eip150_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155_block": "0", - "eip158_block": "0", - "byzantium_block": "0", - "constantinople_block": "0", - "petersburg_block": "0", - "istanbul_block": "0", - "muir_glacier_block": "0", - "berlin_block": "0", - "london_block": null, - "arrow_glacier_block": null, - "merge_fork_block": null - }, - "eip712_allowed_msgs": [] - } - }, - "evmutil": { - "accounts": [], - "params": { - "enabled_conversion_pairs": [ - { - "kava_erc20_address": "0xeA7100edA2f805356291B0E55DaD448599a72C6d", - "denom": "erc20/multichain/usdc" - } - ] - } - }, - "feemarket": { - "params": { - "no_base_fee": true, - "base_fee_change_denominator": 8, - "elasticity_multiplier": 2, - "enable_height": "0", - "base_fee": "1000000000" - }, - "block_gas": "0" - }, - "genutil": { - "gen_txs": [ - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "validator", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "kava1ypjp0m04pyp73hwgtc0dgkx0e9rrydecm054da", - "validator_address": "kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "/iEtt5/G+7hUT4FJ4p29yi2DCRut5Bm1Zx6doestjUA=" - }, - "value": { - "denom": "ukava", - "amount": "1000000000" - } - } - ], - "memo": "461d9761df5db0a112407ca8a82f1774ef2dbaa3@192.168.0.7:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AgIWiZpdEVb69gfaqyNjbA0b3oe+nRS9BZ9gH/I6oGz+" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - } - }, - "signatures": [ - "HE2tfqs81EJLOSmbJQyGv/TLFY5p6Yj028UBRnGMJcdROiNa6QLRnq4VWgpUOViHAgMvqWyZUbMfMc2rrGMUVQ==" - ] - } - ] - }, - "gov": { - "starting_proposal_id": "1", - "deposits": [], - "votes": [], - "proposals": [], - "deposit_params": { - "min_deposit": [ - { - "denom": "ukava", - "amount": "10000000" - } - ], - "max_deposit_period": "172800s" - }, - "voting_params": { - "voting_period": "172800s" - }, - "tally_params": { - "quorum": "0.334000000000000000", - "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000" - } - }, - "hard": { - "params": { - "money_markets": [ - { - "denom": "usdx", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "20000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "usdx:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "0.1", - "kink": "0.8", - "jump_multiplier": "0.5" - }, - "reserve_factor": "0.0", - "keeper_reward_percentage": "0.05" - }, - { - "denom": "ukava", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "kava:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.85", - "jump_multiplier": "10" - }, - "reserve_factor": "0.1", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "atom:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.85", - "jump_multiplier": "10" - }, - "reserve_factor": "0.1", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "akt:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.85", - "jump_multiplier": "10" - }, - "reserve_factor": "0.1", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "luna:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.85", - "jump_multiplier": "10" - }, - "reserve_factor": "0.1", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.80" - }, - "spot_market_id": "osmo:usd", - "conversion_factor": "1000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.85", - "jump_multiplier": "10" - }, - "reserve_factor": "0.1", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "bnb", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.8" - }, - "spot_market_id": "bnb:usd", - "conversion_factor": "100000000", - "interest_rate_model": { - "base_rate_apy": "0.05", - "base_multiplier": "2", - "kink": "0.8", - "jump_multiplier": "10" - }, - "reserve_factor": "0.01", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "busd", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.8" - }, - "spot_market_id": "busd:usd", - "conversion_factor": "100000000", - "interest_rate_model": { - "base_rate_apy": "0.01", - "base_multiplier": "2", - "kink": "0.8", - "jump_multiplier": "10" - }, - "reserve_factor": "0.01", - "keeper_reward_percentage": "0.01" - }, - { - "denom": "xrpb", - "borrow_limit": { - "has_max_limit": false, - "maximum_limit": "100000000000", - "loan_to_value": "0.5" - }, - "spot_market_id": "xrp:usd", - "conversion_factor": "100000000", - "interest_rate_model": { - "base_rate_apy": "0.00", - "base_multiplier": "0.2", - "kink": "0.8", - "jump_multiplier": "1.0" - }, - "reserve_factor": "0.025", - "keeper_reward_percentage": "0.01" - } - ], - "minimum_borrow_usd_value": "10.000000000000000000" - }, - "previous_accumulation_times": [], - "deposits": [], - "borrows": [], - "total_supplied": [], - "total_borrowed": [], - "total_reserves": [] - }, - "ibc": { - "client_genesis": { - "clients": [], - "clients_consensus": [], - "clients_metadata": [], - "params": { - "allowed_clients": [ - "06-solomachine", - "07-tendermint" - ] - }, - "create_localhost": false, - "next_client_sequence": "0" - }, - "connection_genesis": { - "connections": [], - "client_connection_paths": [], - "next_connection_sequence": "0", - "params": { - "max_expected_time_per_block": "30000000000" - } - }, - "channel_genesis": { - "channels": [], - "acknowledgements": [], - "commitments": [], - "receipts": [], - "send_sequences": [], - "recv_sequences": [], - "ack_sequences": [], - "next_channel_sequence": "0" - } - }, - "incentive": { - "params": { - "usdx_minting_reward_periods": [ - { - "active": true, - "rewards_per_second": { - "amount": "122354", - "denom": "ukava" - }, - "collateral_type": "bnb-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "122354", - "denom": "ukava" - }, - "collateral_type": "luna-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "122354", - "denom": "ukava" - }, - "collateral_type": "btcb-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "30588", - "denom": "ukava" - }, - "collateral_type": "busd-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "31746", - "denom": "ukava" - }, - "collateral_type": "xrpb-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "31746", - "denom": "ukava" - }, - "collateral_type": "ukava-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - }, - { - "active": true, - "rewards_per_second": { - "amount": "23809", - "denom": "ukava" - }, - "collateral_type": "hard-a", - "start": "2021-12-08T14:00:00Z", - "end": "2024-10-16T14:00:00Z" - } - ], - "hard_supply_reward_periods": [ - { - "active": true, - "collateral_type": "bnb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "btcb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12355", - "denom": "hard" - }, - { - "amount": "12355", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "xrpb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12355", - "denom": "hard" - }, - { - "amount": "12355", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12355", - "denom": "hard" - }, - { - "amount": "12355", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "busd", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12355", - "denom": "hard" - }, - { - "amount": "12355", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "ukava", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "hard", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "123455", - "denom": "hard" - } - ] - } - ], - "hard_borrow_reward_periods": [ - { - "active": true, - "collateral_type": "bnb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "busd", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "ukava", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "xrpb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - }, - { - "active": true, - "collateral_type": "btcb", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "12345", - "denom": "hard" - } - ] - } - ], - "delegator_reward_periods": [ - { - "active": true, - "collateral_type": "ukava", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "316880", - "denom": "hard" - }, - { - "amount": "316880", - "denom": "swp" - } - ] - } - ], - "savings_reward_periods": [ - { - "active": true, - "collateral_type": "ukava", - "start": "2022-04-21T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "31688", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "usdx", - "start": "2022-04-21T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "31688", - "denom": "ukava" - } - ] - } - ], - "swap_reward_periods": [ - { - "active": true, - "collateral_type": "ukava:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "316880", - "denom": "swp" - }, - { - "amount": "31688", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "swp:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "616880", - "denom": "swp" - }, - { - "amount": "31688", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "hard:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "116880", - "denom": "swp" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "116880", - "denom": "swp" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "116880", - "denom": "swp" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "116880", - "denom": "swp" - } - ] - }, - { - "active": true, - "collateral_type": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "116880", - "denom": "swp" - } - ] - }, - { - "active": true, - "collateral_type": "busd:usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "156880", - "denom": "swp" - } - ] - } - ], - "earn_reward_periods": [ - { - "active": true, - "collateral_type": "ukava", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "3168", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "usdx", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "316880", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "bkava", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "316880", - "denom": "ukava" - } - ] - }, - { - "active": true, - "collateral_type": "erc20/multichain/usdc", - "start": "2021-12-08T14:00:00Z", - "end": "2024-01-01T00:00:00Z", - "rewards_per_second": [ - { - "amount": "316880", - "denom": "ukava" - } - ] - } - ], - "claim_multipliers": [ - { - "denom": "hard", - "multipliers": [ - { - "name": "large", - "months_lockup": "0", - "factor": "1.0" - } - ] - }, - { - "denom": "swp", - "multipliers": [ - { - "name": "large", - "months_lockup": "0", - "factor": "1.0" - } - ] - }, - { - "denom": "ukava", - "multipliers": [ - { - "name": "large", - "months_lockup": "0", - "factor": "1.0" - } - ] - } - ], - "claim_end": "2025-01-01T00:00:00Z" - }, - "usdx_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "hard_supply_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "hard_borrow_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "delegator_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "swap_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "usdx_minting_claims": [], - "hard_liquidity_provider_claims": [], - "delegator_claims": [], - "swap_claims": [], - "savings_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "savings_claims": [], - "earn_reward_state": { - "accumulation_times": [], - "multi_reward_indexes": [] - }, - "earn_claims": [] - }, - "issuance": { - "params": { - "assets": [ - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "ukava", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "swp", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "erc20/multichain/usdt", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "usdx", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "erc20/multichain/usdc", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "hard", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "busd", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "btcb", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "bnb", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - }, - { - "owner": "kava1vlpsrmdyuywvaqrv7rx6xga224sqfwz3fyfhwq", - "denom": "xrpb", - "blocked_addresses": [], - "paused": false, - "blockable": false, - "rate_limit": { - "active": false, - "limit": "0", - "time_period": "0s" - } - } - ] - }, - "supplies": [] - }, - "kavadist": { - "params": { - "active": false, - "periods": [], - "infrastructure_params": { - "infrastructure_periods": [], - "core_rewards": [], - "partner_rewards": [] - } - }, - "previous_block_time": "1970-01-01T00:00:01Z" - }, - "liquid": {}, - "mint": { - "minter": { - "inflation": "0.130000000000000000", - "annual_provisions": "0.000000000000000000" - }, - "params": { - "mint_denom": "ukava", - "inflation_rate_change": "0.130000000000000000", - "inflation_max": "0.750000000000000000", - "inflation_min": "0.750000000000000000", - "goal_bonded": "0.670000000000000000", - "blocks_per_year": "6311520" - } - }, - "params": null, - "pricefeed": { - "params": { - "markets": [ - { - "active": true, - "base_asset": "bnb", - "market_id": "bnb:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "bnb", - "market_id": "bnb:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "btc", - "market_id": "btc:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "btc", - "market_id": "btc:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "xrp", - "market_id": "xrp:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "xrp", - "market_id": "xrp:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "busd", - "market_id": "busd:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "busd", - "market_id": "busd:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "kava", - "market_id": "kava:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "kava", - "market_id": "kava:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "hard", - "market_id": "hard:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "hard", - "market_id": "hard:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "atom", - "market_id": "atom:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "atom", - "market_id": "atom:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "osmo", - "market_id": "osmo:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "osmo", - "market_id": "osmo:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "akt", - "market_id": "akt:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "akt", - "market_id": "akt:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "luna", - "market_id": "luna:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "luna", - "market_id": "luna:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "usdx", - "market_id": "usdx:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "usdx", - "market_id": "usdx:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "usdx", - "market_id": "usdx:usd:720", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "swp", - "market_id": "swp:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "swp", - "market_id": "swp:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "erc20/multichain/usdc", - "market_id": "erc20/multichain/usdc:usd", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - }, - { - "active": true, - "base_asset": "erc20/multichain/usdc", - "market_id": "erc20/multichain/usdc:usd:30", - "oracles": [ - "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em" - ], - "quote_asset": "usd" - } - ] - }, - "posted_prices": [ - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "bnb:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "215.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "bnb:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "217.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "btc:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "29500.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "btc:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "28500.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "akt:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "akt:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "osmo:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "4.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "osmo:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "4.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "luna:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "92.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "luna:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "92.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "atom:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "24.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "atom:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "24.962650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "xrp:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "0.552650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "xrp:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "0.552650000000001782" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "busd:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "busd:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "usdx:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "usdx:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "usdx:usd:720", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "kava:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "3.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "kava:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "3.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "hard:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "0.500000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "hard:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "0.500000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "swp:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "2.150000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "swp:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "2.150000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "erc20/multichain/usdc:usd", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - }, - { - "expiry": "2023-07-20T00:00:00Z", - "market_id": "erc20/multichain/usdc:usd:30", - "oracle_address": "kava1acge4tcvhf3q6fh53fgwaa7vsq40wvx6wn50em", - "price": "1.000000000000000000" - } - ] - }, - "router": {}, - "savings": { - "params": { - "supported_denoms": [ - "bkava-kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42", - "usdx", - "ukava", - "hard", - "swp", - "bkava", - "erc20/multichain/usdc" - ] - }, - "deposits": [] - }, - "slashing": { - "params": { - "signed_blocks_window": "100", - "min_signed_per_window": "0.500000000000000000", - "downtime_jail_duration": "600s", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.010000000000000000" - }, - "signing_infos": [], - "missed_blocks": [] - }, - "staking": { - "params": { - "unbonding_time": "1814400s", - "max_validators": 100, - "max_entries": 7, - "historical_entries": 10000, - "bond_denom": "ukava" - }, - "last_total_power": "0", - "last_validator_powers": [], - "validators": [], - "delegations": [], - "unbonding_delegations": [], - "redelegations": [], - "exported": false - }, - "swap": { - "params": { - "allowed_pools": [ - { - "token_a": "ukava", - "token_b": "usdx" - }, - { - "token_a": "hard", - "token_b": "usdx" - }, - { - "token_a": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2", - "token_b": "usdx" - }, - { - "token_a": "ibc/4129EB76C01ED14052054BB975DE0C6C5010E12FFD9253C20C58BCD828BEE9A5", - "token_b": "usdx" - }, - { - "token_a": "ibc/C72DE26FFF16DE62BE2784E12229BDF5F4465CE8B10530426D6DB53255FF01B2", - "token_b": "usdx" - }, - { - "token_a": "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518", - "token_b": "usdx" - }, - { - "token_a": "swp", - "token_b": "usdx" - }, - { - "token_a": "bnb", - "token_b": "usdx" - }, - { - "token_a": "btcb", - "token_b": "usdx" - }, - { - "token_a": "busd", - "token_b": "usdx" - }, - { - "token_a": "usdx", - "token_b": "xrpb" - } - ], - "swap_fee": "0.001500000000000000" - }, - "pool_records": [ - { - "pool_id": "btcb:usdx", - "reserves_a": { - "amount": "200000000", - "denom": "btcb" - }, - "reserves_b": { - "amount": "100000000000", - "denom": "usdx" - }, - "total_shares": "4472135954" - }, - { - "pool_id": "hard:usdx", - "reserves_a": { - "amount": "1000000000", - "denom": "hard" - }, - "reserves_b": { - "amount": "1000000000", - "denom": "usdx" - }, - "total_shares": "1000000000" - }, - { - "pool_id": "swp:usdx", - "reserves_a": { - "amount": "5000000000", - "denom": "swp" - }, - "reserves_b": { - "amount": "1000000000", - "denom": "usdx" - }, - "total_shares": "2236067977" - }, - { - "pool_id": "ukava:usdx", - "reserves_a": { - "amount": "5000000000", - "denom": "ukava" - }, - "reserves_b": { - "amount": "1000000000", - "denom": "usdx" - }, - "total_shares": "2236067977" - } - ], - "share_records": [ - { - "depositor": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "pool_id": "btcb:usdx", - "shares_owned": "4472135954" - }, - { - "depositor": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "pool_id": "hard:usdx", - "shares_owned": "1000000000" - }, - { - "depositor": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "pool_id": "swp:usdx", - "shares_owned": "2236067977" - }, - { - "depositor": "kava173w2zz287s36ewnnkf4mjansnthnnsz7rtrxqc", - "pool_id": "ukava:usdx", - "shares_owned": "2236067977" - } - ] - }, - "transfer": { - "port_id": "transfer", - "denom_traces": [], - "params": { - "send_enabled": true, - "receive_enabled": true - } - }, - "upgrade": {}, - "validatorvesting": null, - "vesting": {} - } -} diff --git a/tests/e2e/generated/kava-1/config/gentx/gentx-461d9761df5db0a112407ca8a82f1774ef2dbaa3.json b/tests/e2e/generated/kava-1/config/gentx/gentx-461d9761df5db0a112407ca8a82f1774ef2dbaa3.json deleted file mode 100644 index 69811f55..00000000 --- a/tests/e2e/generated/kava-1/config/gentx/gentx-461d9761df5db0a112407ca8a82f1774ef2dbaa3.json +++ /dev/null @@ -1 +0,0 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"validator","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"kava1ypjp0m04pyp73hwgtc0dgkx0e9rrydecm054da","validator_address":"kavavaloper1ypjp0m04pyp73hwgtc0dgkx0e9rrydeckewa42","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/iEtt5/G+7hUT4FJ4p29yi2DCRut5Bm1Zx6doestjUA="},"value":{"denom":"ukava","amount":"1000000000"}}],"memo":"461d9761df5db0a112407ca8a82f1774ef2dbaa3@192.168.0.7:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AgIWiZpdEVb69gfaqyNjbA0b3oe+nRS9BZ9gH/I6oGz+"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":["HE2tfqs81EJLOSmbJQyGv/TLFY5p6Yj028UBRnGMJcdROiNa6QLRnq4VWgpUOViHAgMvqWyZUbMfMc2rrGMUVQ=="]} diff --git a/tests/e2e/generated/kava-1/config/init-data-directory.sh b/tests/e2e/generated/kava-1/config/init-data-directory.sh deleted file mode 100755 index 3a5b1c0b..00000000 --- a/tests/e2e/generated/kava-1/config/init-data-directory.sh +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh -set -e - -# This script creates a data directory if one doesn't exist. -# It's designed to run before the chain starts to properly initialize the data directory in case `kvd init` was not run. -# This behaviour should probably live in tendermint. - -configDir=$HOME/.kava/config -dataDir=$HOME/.kava/data -valStateFile=$dataDir/priv_validator_state.json - -if ! test -f "$valStateFile"; then - echo "$valStateFile doesn't exist, creating it" - mkdir -p $dataDir - cp $configDir/priv_validator_state.json.example "$valStateFile" -fi diff --git a/tests/e2e/generated/kava-1/config/node_key.json b/tests/e2e/generated/kava-1/config/node_key.json deleted file mode 100644 index 4cc69c01..00000000 --- a/tests/e2e/generated/kava-1/config/node_key.json +++ /dev/null @@ -1 +0,0 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"CD7Hkk7hzHx/nn2DasmELmhord4rn0SDLpHrXtATuiM6anFSdulMLfZLZFrKpHtl/kvESy+B0NH4Hf2GI+BkEg=="}} \ No newline at end of file diff --git a/tests/e2e/generated/kava-1/config/priv_validator_key.json b/tests/e2e/generated/kava-1/config/priv_validator_key.json deleted file mode 100644 index 3004c00a..00000000 --- a/tests/e2e/generated/kava-1/config/priv_validator_key.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "address": "8A635482445A7726F17DEB53014D8E8E3E6DA6B6", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "/iEtt5/G+7hUT4FJ4p29yi2DCRut5Bm1Zx6doestjUA=" - }, - "priv_key": { - "type": "tendermint/PrivKeyEd25519", - "value": "w+2nJVmnZb0NEaf6mDWy85/EOvELbPtXjeioUGfBUqn+IS23n8b7uFRPgUninb3KLYMJG63kGbVnHp2h6y2NQA==" - } -} \ No newline at end of file diff --git a/tests/e2e/generated/kava-1/config/priv_validator_state.json.example b/tests/e2e/generated/kava-1/config/priv_validator_state.json.example deleted file mode 100644 index 48f3b67e..00000000 --- a/tests/e2e/generated/kava-1/config/priv_validator_state.json.example +++ /dev/null @@ -1,5 +0,0 @@ -{ - "height": "0", - "round": 0, - "step": 0 -} \ No newline at end of file diff --git a/tests/e2e/kvtool b/tests/e2e/kvtool new file mode 160000 index 00000000..c80093f2 --- /dev/null +++ b/tests/e2e/kvtool @@ -0,0 +1 @@ +Subproject commit c80093f2b9133c30e9e24da32a74a870d6e33b57 diff --git a/tests/e2e/runner/chain.go b/tests/e2e/runner/chain.go new file mode 100644 index 00000000..1e3aad8a --- /dev/null +++ b/tests/e2e/runner/chain.go @@ -0,0 +1,81 @@ +package runner + +import ( + "errors" + "fmt" + + "github.com/ethereum/go-ethereum/ethclient" + "google.golang.org/grpc" + + "github.com/kava-labs/kava/tests/util" +) + +var ( + ErrChainAlreadyExists = errors.New("chain already exists") +) + +// ChainDetails wraps information about the ports exposed to the host that endpoints could be access on. +type ChainDetails struct { + RpcPort string + GrpcPort string + RestPort string + EvmPort string + + StakingDenom string +} + +func (c ChainDetails) EvmClient() (*ethclient.Client, error) { + evmRpcUrl := fmt.Sprintf("http://localhost:%s", c.EvmPort) + return ethclient.Dial(evmRpcUrl) +} + +func (c ChainDetails) GrpcConn() (*grpc.ClientConn, error) { + grpcUrl := fmt.Sprintf("http://localhost:%s", c.GrpcPort) + return util.NewGrpcConnection(grpcUrl) +} + +type Chains struct { + byName map[string]*ChainDetails +} + +func NewChains() Chains { + return Chains{byName: make(map[string]*ChainDetails, 0)} +} + +func (c Chains) MustGetChain(name string) *ChainDetails { + chain, found := c.byName[name] + if !found { + panic(fmt.Sprintf("no chain with name %s found", name)) + } + return chain +} + +func (c *Chains) Register(name string, chain *ChainDetails) error { + if _, found := c.byName[name]; found { + return ErrChainAlreadyExists + } + c.byName[name] = chain + return nil +} + +// the Chain details are all hardcoded because they are currently fixed by kvtool. +// some day they may be configurable, at which point `runner` can determine the ports +// and generate these details dynamically +var ( + kavaChain = ChainDetails{ + RpcPort: "26657", + RestPort: "1317", + GrpcPort: "9090", + EvmPort: "8545", + + StakingDenom: "ukava", + } + ibcChain = ChainDetails{ + RpcPort: "26658", + RestPort: "1318", + GrpcPort: "9092", + EvmPort: "8547", + + StakingDenom: "uatom", + } +) diff --git a/tests/e2e/runner/main.go b/tests/e2e/runner/main.go index 90d41e10..4aaaad5d 100644 --- a/tests/e2e/runner/main.go +++ b/tests/e2e/runner/main.go @@ -4,124 +4,104 @@ import ( "fmt" "log" "net/http" + "os" + "os/exec" "time" - "github.com/ory/dockertest/v3" - "github.com/ory/dockertest/v3/docker" + "github.com/cenkalti/backoff/v4" ) type Config struct { - ConfigDir string - ImageTag string - - KavaRpcPort string - KavaGrpcPort string - KavaRestPort string - KavaEvmPort string + ImageTag string + IncludeIBC bool } // NodeRunner is responsible for starting and managing docker containers to run a node. type NodeRunner interface { - StartChains() + StartChains() Chains Shutdown() } -// SingleKavaNodeRunner manages and runs a single Kava node. -type SingleKavaNodeRunner struct { - config Config - - pool *dockertest.Pool - resource *dockertest.Resource +// KavaNodeRunner manages and runs a single Kava node. +type KavaNodeRunner struct { + config Config + kavaChain *ChainDetails } -var _ NodeRunner = &SingleKavaNodeRunner{} +var _ NodeRunner = &KavaNodeRunner{} -func NewSingleKavaNode(config Config) *SingleKavaNodeRunner { - return &SingleKavaNodeRunner{ +func NewKavaNode(config Config) *KavaNodeRunner { + return &KavaNodeRunner{ config: config, } } -func (k *SingleKavaNodeRunner) StartChains() { +func (k *KavaNodeRunner) StartChains() Chains { + installKvtoolCmd := exec.Command("./scripts/install-kvtool.sh") + installKvtoolCmd.Stdout = os.Stdout + installKvtoolCmd.Stderr = os.Stderr + if err := installKvtoolCmd.Run(); err != nil { + panic(fmt.Sprintf("failed to install kvtool: %s", err.Error())) + } + log.Println("starting kava node") - k.setupDockerPool() + kvtoolArgs := []string{"testnet", "bootstrap"} + if k.config.IncludeIBC { + kvtoolArgs = append(kvtoolArgs, "--ibc") + } + startKavaCmd := exec.Command("kvtool", kvtoolArgs...) + startKavaCmd.Stdout = os.Stdout + startKavaCmd.Stderr = os.Stderr + if err := startKavaCmd.Run(); err != nil { + panic(fmt.Sprintf("failed to start kava: %s", err.Error())) + } + + k.kavaChain = &kavaChain + err := k.waitForChainStart() if err != nil { k.Shutdown() panic(err) } + log.Println("kava is started!") + + chains := NewChains() + chains.Register("kava", k.kavaChain) + if k.config.IncludeIBC { + chains.Register("ibc", &ibcChain) + } + return chains } -func (k *SingleKavaNodeRunner) Shutdown() { +func (k *KavaNodeRunner) Shutdown() { log.Println("shutting down kava node") - k.pool.Purge(k.resource) + shutdownKavaCmd := exec.Command("kvtool", "testnet", "down") + shutdownKavaCmd.Stdout = os.Stdout + shutdownKavaCmd.Stderr = os.Stderr + if err := shutdownKavaCmd.Run(); err != nil { + panic(fmt.Sprintf("failed to shutdown kvtool: %s", err.Error())) + } } -func (k *SingleKavaNodeRunner) setupDockerPool() { - pool, err := dockertest.NewPool("") - if err != nil { - log.Fatalf("Failed to make docker pool: %s", err) - } - k.pool = pool - - err = pool.Client.Ping() - if err != nil { - log.Fatalf("Failed to connect to docker: %s", err) - } - - resource, err := k.pool.RunWithOptions(&dockertest.RunOptions{ - Name: "kavanode", - Repository: "kava/kava", - Tag: k.config.ImageTag, - Cmd: []string{ - "sh", - "-c", - "/root/.kava/config/init-data-directory.sh && kava start --rpc.laddr=tcp://0.0.0.0:26657", - }, - Mounts: []string{ - fmt.Sprintf("%s:/root/.kava/config", k.config.ConfigDir), - }, - ExposedPorts: []string{ - "26657", // port inside container for Kava RPC - "1317", // port inside container for Kava REST API - "9090", // port inside container for Kava GRPC - "8545", // port inside container for EVM JSON-RPC - }, - // expose the internal ports on the configured ports - PortBindings: map[docker.Port][]docker.PortBinding{ - "26657": {{HostIP: "", HostPort: k.config.KavaRpcPort}}, - "1327": {{HostIP: "", HostPort: k.config.KavaRestPort}}, - "9090": {{HostIP: "", HostPort: k.config.KavaGrpcPort}}, - "8545": {{HostIP: "", HostPort: k.config.KavaEvmPort}}, - }, - }, func(config *docker.HostConfig) { - // set AutoRemove to true so that stopped container goes away by itself - config.AutoRemove = true - config.RestartPolicy = docker.RestartPolicy{Name: "no"} - }) - if err != nil { - log.Fatalf("Failed to start kava node: %s", err) - } - k.resource = resource - log.Println(resource.GetHostPort("26657")) -} - -func (k *SingleKavaNodeRunner) waitForChainStart() error { +func (k *KavaNodeRunner) waitForChainStart() error { // exponential backoff on trying to ping the node, timeout after 30 seconds - k.pool.MaxWait = 30 * time.Second - if err := k.pool.Retry(k.pingKava); err != nil { + b := backoff.NewExponentialBackOff() + b.MaxInterval = 5 * time.Second + b.MaxElapsedTime = 30 * time.Second + if err := backoff.Retry(k.pingKava, b); err != nil { return fmt.Errorf("failed to start & connect to chain: %s", err) } + b.Reset() // the evm takes a bit longer to start up. wait for it to start as well. - if err := k.pool.Retry(k.pingEvm); err != nil { + if err := backoff.Retry(k.pingEvm, b); err != nil { return fmt.Errorf("failed to start & connect to chain: %s", err) } return nil } -func (k *SingleKavaNodeRunner) pingKava() error { +func (k *KavaNodeRunner) pingKava() error { log.Println("pinging kava chain...") - url := fmt.Sprintf("http://localhost:%s/status", k.config.KavaRpcPort) + url := fmt.Sprintf("http://localhost:%s/status", k.kavaChain.RpcPort) res, err := http.Get(url) if err != nil { return err @@ -134,9 +114,9 @@ func (k *SingleKavaNodeRunner) pingKava() error { return nil } -func (k *SingleKavaNodeRunner) pingEvm() error { +func (k *KavaNodeRunner) pingEvm() error { log.Println("pinging evm...") - url := fmt.Sprintf("http://localhost:%s", k.config.KavaEvmPort) + url := fmt.Sprintf("http://localhost:%s", k.kavaChain.EvmPort) res, err := http.Get(url) if err != nil { return err diff --git a/tests/e2e/scripts/install-kvtool.sh b/tests/e2e/scripts/install-kvtool.sh new file mode 100755 index 00000000..4de7f60c --- /dev/null +++ b/tests/e2e/scripts/install-kvtool.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if hash kvtool 2>/dev/null; then + echo "[install-kvtool.sh] kvtool is already installed. skipping installation." + exit 0 +fi + +echo "[install-kvtool.sh] installing kvtool." +cd kvtool || exit 1 +make install diff --git a/tests/e2e/testutil/account.go b/tests/e2e/testutil/account.go index e3f2e318..281f195b 100644 --- a/tests/e2e/testutil/account.go +++ b/tests/e2e/testutil/account.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/common" ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/stretchr/testify/require" "github.com/tharsis/ethermint/crypto/ethsecp256k1" emtypes "github.com/tharsis/ethermint/types" @@ -24,7 +25,7 @@ import ( "github.com/kava-labs/kava/tests/util" ) -var BroadcastTimeoutErr = errors.New("timed out waiting for tx to be committed to block") +var ErrBroadcastTimeout = errors.New("timed out waiting for tx to be committed to block") type SigningAccount struct { name string @@ -44,58 +45,58 @@ type SigningAccount struct { l *log.Logger } -// GetAccount returns the account with the given name or fails -func (suite *E2eTestSuite) GetAccount(name string) *SigningAccount { - acc, found := suite.accounts[name] +// GetAccount returns the account with the given name or fails. +func (chain *Chain) GetAccount(name string) *SigningAccount { + acc, found := chain.accounts[name] if !found { - suite.Failf("account does not exist", "failed to find account with name %s", name) + chain.t.Fatalf("failed to find account with name %s", name) } return acc } -// AddNewSigningAccount sets up a new account with a signer. -func (suite *E2eTestSuite) AddNewSigningAccount(name string, hdPath *hd.BIP44Params, chainId, mnemonic string) *SigningAccount { - if _, found := suite.accounts[name]; found { - suite.Failf("can't create signing account", "account with name %s already exists", name) +// AddNewSigningAccount sets up a new account with a signer for SDK and EVM transactions. +func (chain *Chain) AddNewSigningAccount(name string, hdPath *hd.BIP44Params, chainId, mnemonic string) *SigningAccount { + if _, found := chain.accounts[name]; found { + chain.t.Fatalf("account with name %s already exists", name) } // Kava signing account for SDK side privKeyBytes, err := hd.Secp256k1.Derive()(mnemonic, "", hdPath.String()) - suite.NoErrorf(err, "failed to derive private key from mnemonic for %s: %s", name, err) + require.NoErrorf(chain.t, err, "failed to derive private key from mnemonic for %s: %s", name, err) privKey := ðsecp256k1.PrivKey{Key: privKeyBytes} kavaSigner := util.NewKavaSigner( chainId, - suite.encodingConfig, - suite.Auth, - suite.Tx, + chain.encodingConfig, + chain.Auth, + chain.Tx, privKey, 100, ) sdkReqChan := make(chan util.KavaMsgRequest) sdkResChan, err := kavaSigner.Run(sdkReqChan) - suite.NoErrorf(err, "failed to start signer for account %s: %s", name, err) + require.NoErrorf(chain.t, err, "failed to start signer for account %s: %s", name, err) // Kava signing account for EVM side evmChainId, err := emtypes.ParseChainID(chainId) - suite.NoErrorf(err, "unable to parse ethermint-compatible chain id from %s", chainId) + require.NoErrorf(chain.t, err, "unable to parse ethermint-compatible chain id from %s", chainId) ecdsaPrivKey, err := crypto.HexToECDSA(hex.EncodeToString(privKeyBytes)) - suite.NoError(err, "failed to generate ECDSA private key from bytes") + require.NoError(chain.t, err, "failed to generate ECDSA private key from bytes") evmSigner, err := util.NewEvmSigner( - suite.EvmClient, + chain.EvmClient, ecdsaPrivKey, evmChainId, ) - suite.NoErrorf(err, "failed to create evm signer") + require.NoErrorf(chain.t, err, "failed to create evm signer") evmReqChan := make(chan util.EvmTxRequest) evmResChan := evmSigner.Run(evmReqChan) logger := log.New(os.Stdout, fmt.Sprintf("[%s] ", name), log.LstdFlags) - suite.accounts[name] = &SigningAccount{ + chain.accounts[name] = &SigningAccount{ name: name, mnemonic: mnemonic, l: logger, @@ -112,12 +113,12 @@ func (suite *E2eTestSuite) AddNewSigningAccount(name string, hdPath *hd.BIP44Par SdkAddress: kavaSigner.Address(), } - return suite.accounts[name] + return chain.accounts[name] } // SignAndBroadcastKavaTx sends a request to the signer and awaits its response. func (a *SigningAccount) SignAndBroadcastKavaTx(req util.KavaMsgRequest) util.KavaMsgResponse { - a.l.Printf("broadcasting sdk tx %+v\n", req.Data) + a.l.Printf("broadcasting sdk tx. has data = %+v\n", req.Data) // send the request to signer a.sdkReqChan <- req @@ -165,7 +166,7 @@ func (a *SigningAccount) SignAndBroadcastEvmTx(req util.EvmTxRequest) EvmTxRespo for { select { case <-timeout: - response.Err = BroadcastTimeoutErr + response.Err = ErrBroadcastTimeout default: response.Receipt, response.Err = a.evmSigner.EvmClient.TransactionReceipt(context.Background(), res.TxHash) if errors.Is(response.Err, ethereum.NotFound) { @@ -180,20 +181,26 @@ func (a *SigningAccount) SignAndBroadcastEvmTx(req util.EvmTxRequest) EvmTxRespo return response } -func (suite *E2eTestSuite) NewFundedAccount(name string, funds sdk.Coins) *SigningAccount { +// NewFundedAccount creates a SigningAccount for a random account & funds the account from the whale. +func (chain *Chain) NewFundedAccount(name string, funds sdk.Coins) *SigningAccount { entropy, err := bip39.NewEntropy(128) - suite.NoErrorf(err, "failed to generate entropy for account %s: %s", name, err) + require.NoErrorf(chain.t, err, "failed to generate entropy for account %s: %s", name, err) mnemonic, err := bip39.NewMnemonic(entropy) - suite.NoErrorf(err, "failed to create new mnemonic for account %s: %s", name, err) + require.NoErrorf(chain.t, err, "failed to create new mnemonic for account %s: %s", name, err) - acc := suite.AddNewSigningAccount( + acc := chain.AddNewSigningAccount( name, hd.CreateHDPath(app.Bip44CoinType, 0, 0), ChainId, mnemonic, ) - whale := suite.GetAccount(FundedAccountName) + // don't attempt to fund when no funds are desired + if funds.IsZero() { + return acc + } + + whale := chain.GetAccount(FundedAccountName) whale.l.Printf("attempting to fund created account (%s=%s)\n", name, acc.SdkAddress.String()) res := whale.SignAndBroadcastKavaTx( util.KavaMsgRequest{ @@ -201,12 +208,12 @@ func (suite *E2eTestSuite) NewFundedAccount(name string, funds sdk.Coins) *Signi banktypes.NewMsgSend(whale.SdkAddress, acc.SdkAddress, funds), }, GasLimit: 2e5, - FeeAmount: sdk.NewCoins(sdk.NewCoin(StakingDenom, sdk.NewInt(75000))), + FeeAmount: sdk.NewCoins(sdk.NewCoin(chain.details.StakingDenom, sdk.NewInt(75000))), Data: fmt.Sprintf("initial funding of account %s", name), }, ) - suite.NoErrorf(res.Err, "failed to fund new account %s: %s", name, res.Err) + require.NoErrorf(chain.t, res.Err, "failed to fund new account %s: %s", name, res.Err) whale.l.Printf("successfully funded [%s]\n", name) diff --git a/tests/e2e/testutil/chain.go b/tests/e2e/testutil/chain.go new file mode 100644 index 00000000..850828ba --- /dev/null +++ b/tests/e2e/testutil/chain.go @@ -0,0 +1,98 @@ +package testutil + +import ( + "context" + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" + "github.com/cosmos/cosmos-sdk/crypto/hd" + sdk "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/stretchr/testify/require" + + "github.com/kava-labs/kava/app" + kavaparams "github.com/kava-labs/kava/app/params" + "github.com/kava-labs/kava/tests/e2e/runner" + "github.com/kava-labs/kava/tests/util" +) + +// Chain wraps query clients & accounts for a network +type Chain struct { + encodingConfig kavaparams.EncodingConfig + accounts map[string]*SigningAccount + t *testing.T + + details *runner.ChainDetails + + EvmClient *ethclient.Client + Auth authtypes.QueryClient + Bank banktypes.QueryClient + Tm tmservice.ServiceClient + Tx txtypes.ServiceClient +} + +// NewChain creates the query clients & signing account management for a chain run on a set of ports. +// A signing client for the fundedAccountMnemonic is initialized. This account is referred to in the +// code as "whale" and it is used to supply funds to all new accounts. +func NewChain(t *testing.T, details *runner.ChainDetails, fundedAccountMnemonic string) (*Chain, error) { + chain := &Chain{t: t} + chain.encodingConfig = app.MakeEncodingConfig() + chain.details = details + + grpcUrl := fmt.Sprintf("http://localhost:%s", details.GrpcPort) + grpcConn, err := util.NewGrpcConnection(grpcUrl) + if err != nil { + return chain, err + } + + evmRpcUrl := fmt.Sprintf("http://localhost:%s", details.EvmPort) + chain.EvmClient, err = ethclient.Dial(evmRpcUrl) + if err != nil { + return chain, err + } + + chain.Auth = authtypes.NewQueryClient(grpcConn) + chain.Bank = banktypes.NewQueryClient(grpcConn) + chain.Tm = tmservice.NewServiceClient(grpcConn) + chain.Tx = txtypes.NewServiceClient(grpcConn) + + // initialize accounts map + chain.accounts = make(map[string]*SigningAccount) + // setup the signing account for the initially funded account (used to fund all other accounts) + whale := chain.AddNewSigningAccount( + FundedAccountName, + hd.CreateHDPath(Bip44CoinType, 0, 0), + ChainId, + fundedAccountMnemonic, + ) + + // check that funded account is actually funded. + fmt.Printf("account used for funding (%s) address: %s\n", FundedAccountName, whale.SdkAddress) + whaleFunds := chain.QuerySdkForBalances(whale.SdkAddress) + if whaleFunds.IsZero() { + chain.t.Fatal("funded account mnemonic is for account with no funds") + } + + return chain, nil +} + +// Shutdown performs closes all the account request channels for this chain. +func (chain *Chain) Shutdown() { + // close all account request channels + for _, a := range chain.accounts { + close(a.sdkReqChan) + } +} + +// QuerySdkForBalances gets the balance of a particular address on this Chain. +func (chain *Chain) QuerySdkForBalances(addr sdk.AccAddress) sdk.Coins { + res, err := chain.Bank.AllBalances(context.Background(), &banktypes.QueryAllBalancesRequest{ + Address: addr.String(), + }) + require.NoError(chain.t, err) + return res.Balances +} diff --git a/tests/e2e/testutil/config.go b/tests/e2e/testutil/config.go new file mode 100644 index 00000000..2a9af22f --- /dev/null +++ b/tests/e2e/testutil/config.go @@ -0,0 +1,54 @@ +package testutil + +import ( + "fmt" + "os" + "strconv" + + "github.com/subosito/gotenv" +) + +func init() { + // read the .env file, if present + gotenv.Load() +} + +type SuiteConfig struct { + // A funded account used to fnd all other accounts. + FundedAccountMnemonic string + // Whether or not to start an IBC chain. Use `suite.SkipIfIbcDisabled()` in IBC tests in IBC tests. + IncludeIbcTests bool + // When true, the chains will remain running after tests complete (pass or fail) + SkipShutdown bool +} + +func ParseSuiteConfig() SuiteConfig { + // this mnemonic is expected to be a funded account that can seed the funds for all + // new accounts created during tests. it will be available under Accounts["whale"] + fundedAccountMnemonic := os.Getenv("E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC") + if fundedAccountMnemonic == "" { + panic("no E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC provided") + } + var skipShutdown bool + skipShutdownEnv := os.Getenv("E2E_SKIP_SHUTDOWN") + if skipShutdownEnv != "" { + skipShutdown = mustParseBool("E2E_SKIP_SHUTDOWN") + } + return SuiteConfig{ + FundedAccountMnemonic: fundedAccountMnemonic, + IncludeIbcTests: mustParseBool("E2E_INCLUDE_IBC_TESTS"), + SkipShutdown: skipShutdown, + } +} + +func mustParseBool(name string) bool { + envValue := os.Getenv(name) + if envValue == "" { + panic(fmt.Sprintf("%s is unset but expected a bool", name)) + } + value, err := strconv.ParseBool(envValue) + if err != nil { + panic(fmt.Sprintf("%s (%s) cannot be parsed to a bool: %s", name, envValue, err)) + } + return value +} diff --git a/tests/e2e/testutil/suite.go b/tests/e2e/testutil/suite.go index a2883cf8..41c6605a 100644 --- a/tests/e2e/testutil/suite.go +++ b/tests/e2e/testutil/suite.go @@ -1,26 +1,12 @@ package testutil import ( - "context" "fmt" - "os" - "path/filepath" "github.com/stretchr/testify/suite" - "google.golang.org/grpc" - - "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" - "github.com/cosmos/cosmos-sdk/crypto/hd" - sdk "github.com/cosmos/cosmos-sdk/types" - txtypes "github.com/cosmos/cosmos-sdk/types/tx" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/ethereum/go-ethereum/ethclient" "github.com/kava-labs/kava/app" - kavaparams "github.com/kava-labs/kava/app/params" "github.com/kava-labs/kava/tests/e2e/runner" - "github.com/kava-labs/kava/tests/util" ) const ( @@ -31,107 +17,68 @@ const ( // these accounts use the ethsecp256k1 signing algorithm that allows the signing client // to manage both sdk & evm txs. Bip44CoinType = 60 + + IbcPort = "transfer" + IbcChannel = "channel-0" ) type E2eTestSuite struct { suite.Suite - runner runner.NodeRunner - grpcConn *grpc.ClientConn - encodingConfig kavaparams.EncodingConfig + config SuiteConfig + runner runner.NodeRunner - EvmClient *ethclient.Client - Auth authtypes.QueryClient - Bank banktypes.QueryClient - Tm tmservice.ServiceClient - Tx txtypes.ServiceClient - - accounts map[string]*SigningAccount + Kava *Chain + Ibc *Chain } func (suite *E2eTestSuite) SetupSuite() { + var err error fmt.Println("setting up test suite.") app.SetSDKConfig() - suite.encodingConfig = app.MakeEncodingConfig() - // this mnemonic is expected to be a funded account that can seed the funds for all - // new accounts created during tests. it will be available under Accounts["whale"] - fundedAccountMnemonic := os.Getenv("E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC") - if fundedAccountMnemonic == "" { - suite.Fail("no E2E_KAVA_FUNDED_ACCOUNT_MNEMONIC provided") + suiteConfig := ParseSuiteConfig() + suite.config = suiteConfig + + runnerConfig := runner.Config{ + IncludeIBC: suiteConfig.IncludeIbcTests, + ImageTag: "local", } + suite.runner = runner.NewKavaNode(runnerConfig) - configDir, err := filepath.Abs("./generated/kava-1/config") - if err != nil { - suite.Fail("failed to get config dir: %s", err) - } - config := runner.Config{ - ConfigDir: configDir, - - KavaRpcPort: "26657", - KavaRestPort: "1317", - KavaGrpcPort: "9090", - KavaEvmPort: "8545", - - ImageTag: "local", - } - suite.runner = runner.NewSingleKavaNode(config) - suite.runner.StartChains() - - // setup an unauthenticated evm client - evmRpcUrl := fmt.Sprintf("http://localhost:%s", config.KavaEvmPort) - suite.EvmClient, err = ethclient.Dial(evmRpcUrl) + chains := suite.runner.StartChains() + kavachain := chains.MustGetChain("kava") + suite.Kava, err = NewChain(suite.T(), kavachain, suiteConfig.FundedAccountMnemonic) if err != nil { suite.runner.Shutdown() - suite.Fail("failed to connect to evm: %s", err) + suite.T().Fatalf("failed to create kava chain querier: %s", err) } - // create grpc connection - grpcUrl := fmt.Sprintf("http://localhost:%s", config.KavaGrpcPort) - suite.grpcConn, err = util.NewGrpcConnection(grpcUrl) - if err != nil { - suite.runner.Shutdown() - suite.Fail("failed to create grpc connection: %s", err) - } - - // setup unauthenticated query clients for kava / cosmos - suite.Auth = authtypes.NewQueryClient(suite.grpcConn) - suite.Bank = banktypes.NewQueryClient(suite.grpcConn) - suite.Tm = tmservice.NewServiceClient(suite.grpcConn) - suite.Tx = txtypes.NewServiceClient(suite.grpcConn) - - // initialize accounts map - suite.accounts = make(map[string]*SigningAccount) - // setup the signing account for the initially funded account (used to fund all other accounts) - whale := suite.AddNewSigningAccount( - FundedAccountName, - hd.CreateHDPath(Bip44CoinType, 0, 0), - ChainId, - fundedAccountMnemonic, - ) - - // check that funded account is actually funded. - fmt.Printf("account used for funding (%s) address: %s\n", FundedAccountName, whale.SdkAddress) - whaleFunds := suite.QuerySdkForBalances(whale.SdkAddress) - if whaleFunds.IsZero() { - suite.FailNow("no available funds.", "funded account mnemonic is for account with no funds") + if suiteConfig.IncludeIbcTests { + ibcchain := chains.MustGetChain("ibc") + suite.Ibc, err = NewChain(suite.T(), ibcchain, suiteConfig.FundedAccountMnemonic) + if err != nil { + suite.runner.Shutdown() + suite.T().Fatalf("failed to create ibc chain querier: %s", err) + } } } func (suite *E2eTestSuite) TearDownSuite() { fmt.Println("tearing down test suite.") // close all account request channels - for _, a := range suite.accounts { - close(a.sdkReqChan) + suite.Kava.Shutdown() + if suite.Ibc != nil { + suite.Ibc.Shutdown() } // gracefully shutdown docker container(s) - suite.runner.Shutdown() + if !suite.config.SkipShutdown { + suite.runner.Shutdown() + } } -func (suite *E2eTestSuite) QuerySdkForBalances(addr sdk.AccAddress) sdk.Coins { - res, err := suite.Bank.AllBalances(context.Background(), &banktypes.QueryAllBalancesRequest{ - Address: addr.String(), - }) - suite.NoError(err) - return res.Balances +func (suite *E2eTestSuite) SkipIfIbcDisabled() { + if !suite.config.IncludeIbcTests { + suite.T().SkipNow() + } }