diff --git a/.golangci.yaml b/.golangci.yaml index dd60ad4a3b..682344183f 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -2,12 +2,19 @@ issues: exclude: - comment on exported (method|function|type|const|var) exclude-use-default: true - -# Skip generated k8s code -run: - skip-dirs: - - pkg/client + exclude-dirs: - ".*/mocks" - # Skip vendor/ etc skip-dirs-use-default: true +linters: + disable-all: true + enable: + - misspell + - unused + - gofmt + - gocritic + - goconst + - ineffassign + - unparam + - staticcheck + - prealloc diff --git a/.goreleaser-docker.yaml b/.goreleaser-docker.yaml index ec0f5068c3..1bc587bd7d 100644 --- a/.goreleaser-docker.yaml +++ b/.goreleaser-docker.yaml @@ -1,3 +1,5 @@ +--- +version: 2 project_name: node env: - GO111MODULE=on @@ -75,4 +77,3 @@ dockers: archives: - format: binary - rlcp: true diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 3640d8d61d..c31d3c6e0d 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,3 +1,5 @@ +--- +version: 2 project_name: node dist: ./.cache/goreleaser env: diff --git a/Makefile b/Makefile index a78ddc6871..843bd28131 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ include make/init.mk DOCKER_RUN := docker run --rm -v $(shell pwd):/workspace -w /workspace GOLANGCI_LINT_RUN := $(GOLANGCI_LINT) run -LINT = $(GOLANGCI_LINT_RUN) ./... --disable-all --deadline=5m --enable +LINT = $(GOLANGCI_LINT_RUN) ./... --disable-all --timeout=5m --enable GORELEASER_CONFIG ?= .goreleaser.yaml diff --git a/cmd/akash/cmd/flag_test.go b/cmd/akash/cmd/flag_test.go index 220283ded1..6da3d0d446 100644 --- a/cmd/akash/cmd/flag_test.go +++ b/cmd/akash/cmd/flag_test.go @@ -20,8 +20,7 @@ import ( // TestContextFlags tests that all the flags which are set in client.Context are parsed correctly. // This test has been added because recently the --home flag broke with cosmos-sdk@v0.43.0 upgrade. func TestContextFlags(t *testing.T) { - tmpDir, err := os.MkdirTemp("", "test-akash-home") - require.NoError(t, err) + tmpDir := t.TempDir() // expected flag values expectedFlagValues := map[string]interface{}{ @@ -197,6 +196,4 @@ func TestContextFlags(t *testing.T) { }) } - // cleanup - require.NoError(t, os.RemoveAll(tmpDir)) } diff --git a/go.mod b/go.mod index 3df9d1f160..c6c98b89a3 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,11 @@ module github.com/akash-network/node -go 1.21 +go 1.22.0 + +toolchain go1.23.6 require ( - github.com/akash-network/akash-api v0.0.67 + github.com/akash-network/akash-api v0.0.73 github.com/blang/semver/v4 v4.0.0 github.com/boz/go-lifecycle v0.1.1 github.com/cosmos/cosmos-sdk v0.45.16 @@ -39,6 +41,7 @@ require ( ) retract ( + v0.36.3-rc4 v0.34.0 v0.28.1 v0.28.0 @@ -49,6 +52,7 @@ retract ( replace ( // use cosmos fork of keyring github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + github.com/cosmos/cosmos-sdk => github.com/akash-network/cosmos-sdk v0.45.16-akash.1 // use akash version of cosmos ledger api github.com/cosmos/ledger-cosmos-go => github.com/akash-network/ledger-go/cosmos v0.14.4 @@ -63,7 +67,8 @@ replace ( // To be replaced by cosmos/gogoproto in future versions github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 // use cometBFT system fork of tendermint with akash patches - github.com/tendermint/tendermint => github.com/akash-network/cometbft v0.34.27-akash + github.com/tendermint/tendermint => github.com/akash-network/cometbft v0.34.27-akash.2 + github.com/zondax/hid => github.com/troian/hid v0.13.2 github.com/zondax/ledger-go => github.com/akash-network/ledger-go v0.14.3 // latest grpc doesn't work with with cosmos-sdk modified proto compiler, so we need to enforce @@ -116,11 +121,12 @@ require ( github.com/fatih/color v1.14.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/getsentry/sentry-go v0.17.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/gateway v1.1.0 // indirect github.com/golang/protobuf v1.5.4 // indirect @@ -167,7 +173,7 @@ require ( github.com/prometheus/procfs v0.10.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect @@ -181,29 +187,30 @@ require ( github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.5.0 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.22.0 // indirect + golang.org/x/crypto v0.24.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/api v0.26.1 // indirect - k8s.io/apimachinery v0.26.1 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect + k8s.io/api v0.31.5 // indirect + k8s.io/apimachinery v0.31.5 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect nhooyr.io/websocket v1.8.6 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index bcef38da5f..63b8ef9eb7 100644 --- a/go.sum +++ b/go.sum @@ -76,10 +76,12 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/akash-network/akash-api v0.0.67 h1:lwtSvYoxXe/XJKB0UabA2np3l0ujLMsKxmA4e6IWzsM= -github.com/akash-network/akash-api v0.0.67/go.mod h1:PdOQGTCX3kLBoKHdbPF9pe5+vSLANaMJbgA04UE+OqY= -github.com/akash-network/cometbft v0.34.27-akash h1:V1dApDOr8Ee7BJzYyQ7Z9VBtrAul4+baMeA6C49dje0= -github.com/akash-network/cometbft v0.34.27-akash/go.mod h1:BcCbhKv7ieM0KEddnYXvQZR+pZykTKReJJYf7YC7qhw= +github.com/akash-network/akash-api v0.0.73 h1:Wm0NgVgHbuLTAAa9aIRxan1zGwSb+i9/1uWp65vJmXc= +github.com/akash-network/akash-api v0.0.73/go.mod h1:5JMjLPHvWOyyamLz8bJoy6QHqz4I46ANAQpEIIUY1bM= +github.com/akash-network/cometbft v0.34.27-akash.2 h1:2hKEcX+cIv/OLAJ82gBWdkZlVWn+8JUYs4GrDoPAOhU= +github.com/akash-network/cometbft v0.34.27-akash.2/go.mod h1:BcCbhKv7ieM0KEddnYXvQZR+pZykTKReJJYf7YC7qhw= +github.com/akash-network/cosmos-sdk v0.45.16-akash.1 h1:mAvN01zEMK8MMhtbk39/DsjGwczc2zI5kQvuubY5cxU= +github.com/akash-network/cosmos-sdk v0.45.16-akash.1/go.mod h1:NTnk/GuQdFyfk/iGFxDAgQH9fwcbRW/hREap6qaPg48= github.com/akash-network/ledger-go v0.14.3 h1:LCEFkTfgGA2xFMN2CtiKvXKE7dh0QSM77PJHCpSkaAo= github.com/akash-network/ledger-go v0.14.3/go.mod h1:NfsjfFvno9Kaq6mfpsKz4sqjnAVVEsVsnBJfKB4ueAs= github.com/akash-network/ledger-go/cosmos v0.14.4 h1:h3WiXmoKKs9wkj1LHcJ12cLjXXg6nG1fp+UQ5+wu/+o= @@ -221,8 +223,6 @@ github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieEL github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32/go.mod h1:kwMlEC4wWvB48zAShGKVqboJL6w4zCLesaNQ3YLU2BQ= github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/cosmos-sdk v0.45.16 h1:5ba/Bh5/LE55IwHQuCU4fiG4eXeDKtSWzehXRpaKDcw= -github.com/cosmos/cosmos-sdk v0.45.16/go.mod h1:bScuNwWAP0TZJpUf+SHXRU3xGoUPp+X9nAzfeIXts40= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -331,6 +331,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= @@ -366,9 +368,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -456,8 +457,9 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v56 v56.0.0 h1:TysL7dMa/r7wsQi44BjqlwaHvwlFlqkK8CtBWCX3gb4= github.com/google/go-github/v56 v56.0.0/go.mod h1:D8cdcX98YWJvi7TLo7zM4/h8ZTx6u6fwGEkCdisopo0= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= @@ -776,9 +778,8 @@ github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9k github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= -github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= 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= @@ -888,8 +889,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1025,6 +1026,8 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -1085,8 +1088,8 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1162,8 +1165,8 @@ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1249,12 +1252,12 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -1263,8 +1266,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1308,12 +1311,14 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= @@ -1379,8 +1384,8 @@ 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.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1431,14 +1436,14 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/api v0.31.5 h1:7jP74egbPUOCLJV5KheUnwo9gz3zzUsMIj2EPkuYK1E= +k8s.io/api v0.31.5/go.mod h1:RMyMdZG1kJjou2ng5buEti0OHlo0uFXgSzTZ/k5LeVk= +k8s.io/apimachinery v0.31.5 h1:NxhAVGcfrSdTMx3M2v1OnvcMS7h1ZnWyt2x2z8CJJBU= +k8s.io/apimachinery v0.31.5/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= @@ -1446,11 +1451,11 @@ pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/make/init.mk b/make/init.mk index c5eb7fc6a8..a72ce1ab70 100644 --- a/make/init.mk +++ b/make/init.mk @@ -50,7 +50,7 @@ endif # ==== Build tools versions ==== # Format _VERSION -GOLANGCI_LINT_VERSION ?= v1.51.2 +GOLANGCI_LINT_VERSION ?= v1.62.2 STATIK_VERSION ?= v0.1.7 GIT_CHGLOG_VERSION ?= v0.15.1 MOCKERY_VERSION ?= 2.42.0 diff --git a/make/lint.mk b/make/lint.mk index 9d1bc710d9..f485a2f818 100644 --- a/make/lint.mk +++ b/make/lint.mk @@ -6,8 +6,6 @@ SUBLINTERS = unused \ ineffassign \ unparam \ staticcheck \ - revive \ - gosec \ exportloopref \ prealloc # TODO: ^ gochecknoglobals @@ -19,7 +17,7 @@ test-sublinters: $(patsubst %, test-sublinter-%,$(SUBLINTERS)) .PHONY: test-lint-all test-lint-all: $(GOLANGCI_LINT) - $(GOLANGCI_LINT_RUN) ./... --issues-exit-code=0 --deadline=10m + $(GOLANGCI_LINT_RUN) ./... --issues-exit-code=0 --timeout=10m .PHONY: test-sublinter-misspell test-sublinter-misspell: $(GOLANGCI_LINT) diff --git a/make/releasing.mk b/make/releasing.mk index 1e263b8bf0..d78fe56b6e 100644 --- a/make/releasing.mk +++ b/make/releasing.mk @@ -1,6 +1,6 @@ GON_CONFIGFILE ?= gon.json -GORELEASER_DEBUG ?= false +GORELEASER_VERBOSE ?= false GORELEASER_IMAGE := ghcr.io/goreleaser/goreleaser-cross:$(GOTOOLCHAIN_SEMVER) GORELEASER_RELEASE ?= false GORELEASER_MOUNT_CONFIG ?= false @@ -69,7 +69,7 @@ docker-image: -w /go/src/$(GO_MOD_NAME) \ $(GORELEASER_IMAGE) \ -f .goreleaser-docker.yaml \ - --debug=$(GORELEASER_DEBUG) \ + --verbose=$(GORELEASER_VERBOSE) \ --clean \ --skip=publish,validate \ --snapshot @@ -102,6 +102,6 @@ release: gen-changelog -f "$(GORELEASER_CONFIG)" \ release \ $(GORELEASER_SKIP) \ - --debug=$(GORELEASER_DEBUG) \ + --verbose=$(GORELEASER_VERBOSE) \ --clean \ --release-notes=/go/src/$(GO_MOD_NAME)/.cache/changelog.md diff --git a/x/audit/genesis.go b/x/audit/genesis.go index c477ba586f..fca1b78838 100644 --- a/x/audit/genesis.go +++ b/x/audit/genesis.go @@ -2,9 +2,11 @@ package audit import ( "encoding/json" + "sort" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" abci "github.com/tendermint/tendermint/abci/types" "github.com/akash-network/node/x/audit/keeper" @@ -14,17 +16,76 @@ import ( // ValidateGenesis does validation check of the Genesis and returns error incase of failure func ValidateGenesis(data *types.GenesisState) error { + for _, record := range data.Attributes { + if _, err := sdk.AccAddressFromBech32(record.Owner); err != nil { + return sdkerrors.ErrInvalidAddress.Wrap("audited attributes: invalid owner address") + } + + if _, err := sdk.AccAddressFromBech32(record.Auditor); err != nil { + return sdkerrors.ErrInvalidAddress.Wrap("audited attributes: invalid auditor address") + } + + if err := record.Attributes.Validate(); err != nil { + return sdkerrors.Wrap(err, "audited attributes: invalid attributes") + } + } + return nil } // InitGenesis initiate genesis state and return updated validator details -func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data *types.GenesisState) []abci.ValidatorUpdate { +func InitGenesis(ctx sdk.Context, kpr keeper.Keeper, data *types.GenesisState) []abci.ValidatorUpdate { + store := ctx.KVStore(kpr.StoreKey()) + cdc := kpr.Codec() + + for _, record := range data.Attributes { + owner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + panic(sdkerrors.ErrInvalidAddress.Wrap("audited attributes: invalid owner address").Error()) + } + + auditor, err := sdk.AccAddressFromBech32(record.Auditor) + if err != nil { + panic(sdkerrors.ErrInvalidAddress.Wrap("audited attributes: invalid auditor address")) + } + + key := keeper.ProviderKey(types.ProviderID{ + Owner: owner, + Auditor: auditor, + }) + + prov := types.Provider{ + Owner: record.Owner, + Auditor: record.Auditor, + Attributes: record.Attributes, + } + + sort.SliceStable(prov.Attributes, func(i, j int) bool { + return prov.Attributes[i].Key < prov.Attributes[j].Key + }) + + store.Set(key, cdc.MustMarshal(&prov)) + } + return []abci.ValidatorUpdate{} } // ExportGenesis returns genesis state as raw bytes for the provider module func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - return &types.GenesisState{} + var records []types.AuditedAttributes + + k.WithProviders(ctx, func(provider types.Provider) bool { + records = append(records, types.AuditedAttributes{ + Owner: provider.Owner, + Auditor: provider.Auditor, + Attributes: provider.Attributes.Dup(), + }) + return false + }) + + return &types.GenesisState{ + Attributes: records, + } } // DefaultGenesisState returns default genesis state as raw bytes for the provider diff --git a/x/audit/keeper/keeper.go b/x/audit/keeper/keeper.go index 15cf20908c..9b398c44f6 100644 --- a/x/audit/keeper/keeper.go +++ b/x/audit/keeper/keeper.go @@ -48,7 +48,7 @@ func (k Keeper) StoreKey() sdk.StoreKey { func (k Keeper) GetProviderByAuditor(ctx sdk.Context, id types.ProviderID) (types.Provider, bool) { store := ctx.KVStore(k.skey) - buf := store.Get(providerKey(id)) + buf := store.Get(ProviderKey(id)) if buf == nil { return types.Provider{}, false } @@ -65,7 +65,7 @@ func (k Keeper) GetProviderAttributes(ctx sdk.Context, id sdk.Address) (types.Pr var attr types.Providers - iter := sdk.KVStorePrefixIterator(store, providerPrefix(id)) + iter := sdk.KVStorePrefixIterator(store, ProviderPrefix(id)) defer func() { _ = iter.Close() }() @@ -88,7 +88,7 @@ func (k Keeper) GetProviderAttributes(ctx sdk.Context, id sdk.Address) (types.Pr // if key exists, existing values for matching pairs will be replaced func (k Keeper) CreateOrUpdateProviderAttributes(ctx sdk.Context, id types.ProviderID, attr akashtypes.Attributes) error { store := ctx.KVStore(k.skey) - key := providerKey(id) + key := ProviderKey(id) prov := types.Provider{ Owner: id.Owner.String(), @@ -138,7 +138,7 @@ func (k Keeper) CreateOrUpdateProviderAttributes(ctx sdk.Context, id types.Provi func (k Keeper) DeleteProviderAttributes(ctx sdk.Context, id types.ProviderID, keys []string) error { store := ctx.KVStore(k.skey) - key := providerKey(id) + key := ProviderKey(id) buf := store.Get(key) if buf == nil { @@ -220,10 +220,10 @@ func (k Keeper) WithProviders(ctx sdk.Context, fn func(types.Provider) bool) { } } -// WithProviders iterates all signed provider's attributes +// WithProvider iterates all signed provider's attributes func (k Keeper) WithProvider(ctx sdk.Context, id sdk.Address, fn func(types.Provider) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, providerPrefix(id)) + iter := sdk.KVStorePrefixIterator(store, ProviderPrefix(id)) defer func() { _ = iter.Close() }() diff --git a/x/audit/keeper/key.go b/x/audit/keeper/key.go index 347961a7f9..dc7e597ff4 100644 --- a/x/audit/keeper/key.go +++ b/x/audit/keeper/key.go @@ -10,7 +10,7 @@ import ( types "github.com/akash-network/akash-api/go/node/audit/v1beta3" ) -func providerKey(id types.ProviderID) []byte { +func ProviderKey(id types.ProviderID) []byte { buf := bytes.NewBuffer(types.PrefixProviderID()) if _, err := buf.Write(address.MustLengthPrefix(id.Owner.Bytes())); err != nil { panic(err) @@ -23,7 +23,7 @@ func providerKey(id types.ProviderID) []byte { return buf.Bytes() } -func providerPrefix(id sdk.Address) []byte { +func ProviderPrefix(id sdk.Address) []byte { buf := bytes.NewBuffer(types.PrefixProviderID()) if _, err := buf.Write(address.MustLengthPrefix(id.Bytes())); err != nil { panic(err) diff --git a/x/cert/genesis.go b/x/cert/genesis.go index 9819415b63..68cedcdb06 100644 --- a/x/cert/genesis.go +++ b/x/cert/genesis.go @@ -1,7 +1,9 @@ package cert import ( + "crypto/x509" "encoding/json" + "encoding/pem" "fmt" "github.com/cosmos/cosmos-sdk/codec" @@ -20,21 +22,36 @@ func ValidateGenesis(data *types.GenesisState) error { return err } } + return nil } // InitGenesis initiate genesis state and return updated validator details -func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data *types.GenesisState) []abci.ValidatorUpdate { +func InitGenesis(ctx sdk.Context, kpr keeper.Keeper, data *types.GenesisState) []abci.ValidatorUpdate { + store := ctx.KVStore(kpr.StoreKey()) + cdc := kpr.Codec() + for _, record := range data.Certificates { owner, err := sdk.AccAddressFromBech32(record.Owner) if err != nil { panic(fmt.Sprintf("error init certificate from genesis: %s", err)) } - err = keeper.CreateCertificate(ctx, owner, record.Certificate.Cert, record.Certificate.Pubkey) + cert, err := types.ParseAndValidateCertificate(owner, record.Certificate.Cert, record.Certificate.Pubkey) if err != nil { - panic(fmt.Sprintf("error init certificate from genesis: %s", err)) + panic(err.Error()) + } + + key := keeper.CertificateKey(types.CertID{ + Owner: owner, + Serial: *cert.SerialNumber, + }) + + if store.Has(key) { + panic(types.ErrCertificateExists.Error()) } + + store.Set(key, cdc.MustMarshal(&record.Certificate)) } return []abci.ValidatorUpdate{} @@ -42,7 +59,34 @@ func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data *types.GenesisState // ExportGenesis returns genesis state as raw bytes for the provider module func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { - return &types.GenesisState{} + var res types.GenesisCertificates + + k.WithCertificates(ctx, func(id types.CertID, certificate types.CertificateResponse) bool { + block, rest := pem.Decode(certificate.Certificate.Cert) + if len(rest) > 0 { + panic("unable to decode certificate") + } + + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + panic(err.Error()) + } + + if cert.SerialNumber.String() != id.Serial.String() { + panic("certificate id does not match") + } + + res = append(res, types.GenesisCertificate{ + Owner: id.Owner.String(), + Certificate: certificate.Certificate, + }) + + return false + }) + + return &types.GenesisState{ + Certificates: res, + } } // DefaultGenesisState returns default genesis state as raw bytes for the provider diff --git a/x/cert/keeper/grpc_query.go b/x/cert/keeper/grpc_query.go index a310e53e03..1b50bdd561 100644 --- a/x/cert/keeper/grpc_query.go +++ b/x/cert/keeper/grpc_query.go @@ -64,10 +64,10 @@ func (q querier) Certificates(c context.Context, req *types.QueryCertificatesReq certificates = append(certificates, item) } } else { - ownerStore := prefix.NewStore(store, certificatePrefix(owner)) + ownerStore := prefix.NewStore(store, CertificatePrefix(owner)) pageRes, err = sdkquery.FilteredPaginate(ownerStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { // prefixed store returns key without prefix - key = append(certificatePrefix(owner), key...) + key = append(CertificatePrefix(owner), key...) item, err := q.unmarshalIterator(key, value) if err != nil { return true, err diff --git a/x/cert/keeper/keeper.go b/x/cert/keeper/keeper.go index ed11117586..52aefb2ece 100644 --- a/x/cert/keeper/keeper.go +++ b/x/cert/keeper/keeper.go @@ -15,7 +15,7 @@ type Keeper interface { CreateCertificate(sdk.Context, sdk.Address, []byte, []byte) error RevokeCertificate(sdk.Context, types.CertID) error GetCertificateByID(ctx sdk.Context, id types.CertID) (types.CertificateResponse, bool) - WithCertificates(ctx sdk.Context, fn func(certificate types.CertificateResponse) bool) + WithCertificates(ctx sdk.Context, fn func(id types.CertID, certificate types.CertificateResponse) bool) WithCertificatesState(ctx sdk.Context, state types.Certificate_State, fn func(certificate types.CertificateResponse) bool) WithOwner(ctx sdk.Context, id sdk.Address, fn func(types.CertificateResponse) bool) WithOwnerState(ctx sdk.Context, id sdk.Address, state types.Certificate_State, fn func(types.CertificateResponse) bool) @@ -56,7 +56,7 @@ func (k keeper) CreateCertificate(ctx sdk.Context, owner sdk.Address, crt []byte return err } - key := certificateKey(types.CertID{ + key := CertificateKey(types.CertID{ Owner: owner, Serial: *cert.SerialNumber, }) @@ -78,7 +78,7 @@ func (k keeper) CreateCertificate(ctx sdk.Context, owner sdk.Address, crt []byte func (k keeper) RevokeCertificate(ctx sdk.Context, id types.CertID) error { store := ctx.KVStore(k.skey) - key := certificateKey(id) + key := CertificateKey(id) buf := store.Get(key) if buf == nil { @@ -103,7 +103,7 @@ func (k keeper) RevokeCertificate(ctx sdk.Context, id types.CertID) error { func (k keeper) GetCertificateByID(ctx sdk.Context, id types.CertID) (types.CertificateResponse, bool) { store := ctx.KVStore(k.skey) - buf := store.Get(certificateKey(id)) + buf := store.Get(CertificateKey(id)) if buf == nil { return types.CertificateResponse{}, false } @@ -118,7 +118,7 @@ func (k keeper) GetCertificateByID(ctx sdk.Context, id types.CertID) (types.Cert } // WithCertificates iterates all certificates -func (k keeper) WithCertificates(ctx sdk.Context, fn func(certificate types.CertificateResponse) bool) { +func (k keeper) WithCertificates(ctx sdk.Context, fn func(id types.CertID, certificate types.CertificateResponse) bool) { store := ctx.KVStore(k.skey) iter := store.Iterator(nil, nil) @@ -127,8 +127,13 @@ func (k keeper) WithCertificates(ctx sdk.Context, fn func(certificate types.Cert }() for ; iter.Valid(); iter.Next() { + id, err := ParseCertID(types.PrefixCertificateID(), iter.Key()) + if err != nil { + panic(err.Error()) + } + item := k.mustUnmarshal(iter.Key(), iter.Value()) - if stop := fn(item); stop { + if stop := fn(id, item); stop { break } } @@ -156,7 +161,7 @@ func (k keeper) WithCertificatesState(ctx sdk.Context, state types.Certificate_S // WithOwner iterates all certificates by owner func (k keeper) WithOwner(ctx sdk.Context, id sdk.Address, fn func(types.CertificateResponse) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, certificatePrefix(id)) + iter := sdk.KVStorePrefixIterator(store, CertificatePrefix(id)) defer func() { _ = iter.Close() }() @@ -172,7 +177,7 @@ func (k keeper) WithOwner(ctx sdk.Context, id sdk.Address, fn func(types.Certifi // WithOwnerState iterates all certificates by owner in certain state func (k keeper) WithOwnerState(ctx sdk.Context, id sdk.Address, state types.Certificate_State, fn func(types.CertificateResponse) bool) { store := ctx.KVStore(k.skey) - iter := sdk.KVStorePrefixIterator(store, certificatePrefix(id)) + iter := sdk.KVStorePrefixIterator(store, CertificatePrefix(id)) defer func() { _ = iter.Close() }() @@ -188,19 +193,28 @@ func (k keeper) WithOwnerState(ctx sdk.Context, id sdk.Address, state types.Cert } func (k keeper) mustUnmarshal(key, val []byte) types.CertificateResponse { - serial := certificateSerialFromKey(key) + id, err := ParseCertID(types.PrefixCertificateID(), key) + if err != nil { + panic(err) + } + item := types.CertificateResponse{ - Serial: serial.String(), + Serial: id.Serial.String(), } + k.cdc.MustUnmarshal(val, &item.Certificate) return item } func (k keeper) unmarshalIterator(key, val []byte) (types.CertificateResponse, error) { - serial := certificateSerialFromKey(key) + id, err := ParseCertID(types.PrefixCertificateID(), key) + if err != nil { + panic(err) + } + item := types.CertificateResponse{ - Serial: serial.String(), + Serial: id.Serial.String(), } if err := k.cdc.Unmarshal(val, &item.Certificate); err != nil { diff --git a/x/cert/keeper/key.go b/x/cert/keeper/key.go index dae2b02a14..0e45f71638 100644 --- a/x/cert/keeper/key.go +++ b/x/cert/keeper/key.go @@ -6,17 +6,14 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/address" + "github.com/cosmos/cosmos-sdk/types/kv" types "github.com/akash-network/akash-api/go/node/cert/v1beta3" ) -const ( - keyAddrPrefixLen = 2 // 1 byte for PrefixCertificateID followed by 1 byte for owner_address_len -) - -// certificateKey creates a store key of the format: +// CertificateKey creates a store key of the format: // prefix_bytes | owner_address_len (1 byte) | owner_address_bytes | serial_bytes -func certificateKey(id types.CertID) []byte { +func CertificateKey(id types.CertID) []byte { buf := bytes.NewBuffer(types.PrefixCertificateID()) if _, err := buf.Write(address.MustLengthPrefix(id.Owner.Bytes())); err != nil { panic(err) @@ -29,7 +26,7 @@ func certificateKey(id types.CertID) []byte { return buf.Bytes() } -func certificatePrefix(id sdk.Address) []byte { +func CertificatePrefix(id sdk.Address) []byte { buf := bytes.NewBuffer(types.PrefixCertificateID()) if _, err := buf.Write(address.MustLengthPrefix(id.Bytes())); err != nil { panic(err) @@ -38,15 +35,36 @@ func certificatePrefix(id sdk.Address) []byte { return buf.Bytes() } -func certificateSerialFromKey(key []byte) big.Int { - if len(key) < keyAddrPrefixLen { - panic("invalid key size") +func ParseCertID(prefix []byte, from []byte) (types.CertID, error) { + res := types.CertID{ + Serial: *big.NewInt(0), } - addrLen := int(key[keyAddrPrefixLen-1]) - if len(key) < keyAddrPrefixLen+addrLen+1 { - panic("invalid key size") + kv.AssertKeyAtLeastLength(from, len(prefix)) + + // skip prefix if set + from = from[len(prefix):] + + kv.AssertKeyAtLeastLength(from, 1) + + addrLen := from[0] + from = from[1:] + + kv.AssertKeyAtLeastLength(from, int(addrLen)) + + addr := from[:addrLen] + err := sdk.VerifyAddressFormat(addr) + if err != nil { + return res, err } - return *new(big.Int).SetBytes(key[keyAddrPrefixLen+addrLen:]) + // todo add length prefix + from = from[addrLen:] + + serial := from + + res.Owner = sdk.AccAddress(addr) + res.Serial.SetBytes(serial) + + return res, nil } diff --git a/x/deployment/genesis.go b/x/deployment/genesis.go index de4a70337e..4e27429dd0 100644 --- a/x/deployment/genesis.go +++ b/x/deployment/genesis.go @@ -33,13 +33,28 @@ func DefaultGenesisState() *types.GenesisState { } // InitGenesis initiate genesis state and return updated validator details -func InitGenesis(ctx sdk.Context, keeper keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { +func InitGenesis(ctx sdk.Context, kpr keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { + cdc := kpr.Codec() + store := ctx.KVStore(kpr.StoreKey()) + for _, record := range data.Deployments { - if err := keeper.Create(ctx, record.Deployment, record.Groups); err != nil { - return nil + key := keeper.DeploymentKey(record.Deployment.DeploymentID) + + store.Set(key, cdc.MustMarshal(&record.Deployment)) + + for idx := range record.Groups { + group := record.Groups[idx] + + if !group.ID().DeploymentID().Equals(record.Deployment.ID()) { + panic(types.ErrInvalidGroupID) + } + gkey := keeper.GroupKey(group.ID()) + store.Set(gkey, cdc.MustMarshal(&group)) } } - keeper.SetParams(ctx, data.Params) + + kpr.SetParams(ctx, data.Params) + return []abci.ValidatorUpdate{} } diff --git a/x/deployment/keeper/keeper.go b/x/deployment/keeper/keeper.go index 6368f14809..54858d31a1 100644 --- a/x/deployment/keeper/keeper.go +++ b/x/deployment/keeper/keeper.go @@ -71,7 +71,7 @@ func (k Keeper) StoreKey() sdk.StoreKey { func (k Keeper) GetDeployment(ctx sdk.Context, id types.DeploymentID) (types.Deployment, bool) { store := ctx.KVStore(k.skey) - key := deploymentKey(id) + key := DeploymentKey(id) if !store.Has(key) { return types.Deployment{}, false @@ -90,7 +90,7 @@ func (k Keeper) GetDeployment(ctx sdk.Context, id types.DeploymentID) (types.Dep func (k Keeper) GetGroup(ctx sdk.Context, id types.GroupID) (types.Group, bool) { store := ctx.KVStore(k.skey) - key := groupKey(id) + key := GroupKey(id) if !store.Has(key) { return types.Group{}, false @@ -128,7 +128,7 @@ func (k Keeper) GetGroups(ctx sdk.Context, id types.DeploymentID) []types.Group func (k Keeper) Create(ctx sdk.Context, deployment types.Deployment, groups []types.Group) error { store := ctx.KVStore(k.skey) - key := deploymentKey(deployment.ID()) + key := DeploymentKey(deployment.ID()) if store.Has(key) { return types.ErrDeploymentExists @@ -142,7 +142,7 @@ func (k Keeper) Create(ctx sdk.Context, deployment types.Deployment, groups []ty if !group.ID().DeploymentID().Equals(deployment.ID()) { return types.ErrInvalidGroupID } - gkey := groupKey(group.ID()) + gkey := GroupKey(group.ID()) store.Set(gkey, k.cdc.MustMarshal(&group)) } @@ -159,7 +159,7 @@ func (k Keeper) Create(ctx sdk.Context, deployment types.Deployment, groups []ty // UpdateDeployment updates deployment details func (k Keeper) UpdateDeployment(ctx sdk.Context, deployment types.Deployment) error { store := ctx.KVStore(k.skey) - key := deploymentKey(deployment.ID()) + key := DeploymentKey(deployment.ID()) if !store.Has(key) { return types.ErrDeploymentNotFound @@ -181,7 +181,7 @@ func (k Keeper) CloseDeployment(ctx sdk.Context, deployment types.Deployment) { } store := ctx.KVStore(k.skey) - key := deploymentKey(deployment.ID()) + key := DeploymentKey(deployment.ID()) if !store.Has(key) { return @@ -199,7 +199,7 @@ func (k Keeper) CloseDeployment(ctx sdk.Context, deployment types.Deployment) { // OnCloseGroup provides shutdown API for a Group func (k Keeper) OnCloseGroup(ctx sdk.Context, group types.Group, state types.Group_State) error { store := ctx.KVStore(k.skey) - key := groupKey(group.ID()) + key := GroupKey(group.ID()) if !store.Has(key) { return types.ErrGroupNotFound @@ -218,7 +218,7 @@ func (k Keeper) OnCloseGroup(ctx sdk.Context, group types.Group, state types.Gro // OnPauseGroup provides shutdown API for a Group func (k Keeper) OnPauseGroup(ctx sdk.Context, group types.Group) error { store := ctx.KVStore(k.skey) - key := groupKey(group.ID()) + key := GroupKey(group.ID()) if !store.Has(key) { return types.ErrGroupNotFound @@ -237,7 +237,7 @@ func (k Keeper) OnPauseGroup(ctx sdk.Context, group types.Group) error { // OnStartGroup provides shutdown API for a Group func (k Keeper) OnStartGroup(ctx sdk.Context, group types.Group) error { store := ctx.KVStore(k.skey) - key := groupKey(group.ID()) + key := GroupKey(group.ID()) if !store.Has(key) { return types.ErrGroupNotFound @@ -298,14 +298,14 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { func (k Keeper) updateDeployment(ctx sdk.Context, obj types.Deployment) { store := ctx.KVStore(k.skey) - key := deploymentKey(obj.ID()) + key := DeploymentKey(obj.ID()) store.Set(key, k.cdc.MustMarshal(&obj)) } // nolint: unused func (k Keeper) updateGroup(ctx sdk.Context, group types.Group) { store := ctx.KVStore(k.skey) - key := groupKey(group.ID()) + key := GroupKey(group.ID()) store.Set(key, k.cdc.MustMarshal(&group)) } diff --git a/x/deployment/keeper/key.go b/x/deployment/keeper/key.go index 5cc6b1e33e..ef1c6cd3a9 100644 --- a/x/deployment/keeper/key.go +++ b/x/deployment/keeper/key.go @@ -10,7 +10,7 @@ import ( "github.com/akash-network/akash-api/go/sdkutil" ) -func deploymentKey(id types.DeploymentID) []byte { +func DeploymentKey(id types.DeploymentID) []byte { buf := bytes.NewBuffer(types.DeploymentPrefix()) buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { @@ -19,8 +19,8 @@ func deploymentKey(id types.DeploymentID) []byte { return buf.Bytes() } -// groupKey provides prefixed key for a Group's marshalled data. -func groupKey(id types.GroupID) []byte { +// GroupKey provides prefixed key for a Group's marshalled data. +func GroupKey(id types.GroupID) []byte { buf := bytes.NewBuffer(types.GroupPrefix()) buf.Write(address.MustLengthPrefix(sdkutil.MustAccAddressFromBech32(id.Owner))) if err := binary.Write(buf, binary.BigEndian, id.DSeq); err != nil { diff --git a/x/escrow/genesis.go b/x/escrow/genesis.go index ddc07ce9d9..93cdfc57ba 100644 --- a/x/escrow/genesis.go +++ b/x/escrow/genesis.go @@ -72,20 +72,24 @@ func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data *types.GenesisState for idx := range data.Payments { keeper.SavePayment(ctx, data.Payments[idx]) } + return []abci.ValidatorUpdate{} } // ExportGenesis returns genesis state as raw bytes for the provider module func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { state := &types.GenesisState{} + k.WithAccounts(ctx, func(obj types.Account) bool { state.Accounts = append(state.Accounts, obj) return false }) + k.WithPayments(ctx, func(obj types.FractionalPayment) bool { state.Payments = append(state.Payments, obj) return false }) + return state } diff --git a/x/market/genesis.go b/x/market/genesis.go index b38e25f1b2..3d21144c2f 100644 --- a/x/market/genesis.go +++ b/x/market/genesis.go @@ -2,6 +2,7 @@ package market import ( "encoding/json" + "fmt" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -10,6 +11,7 @@ import ( types "github.com/akash-network/akash-api/go/node/market/v1beta4" "github.com/akash-network/node/x/market/keeper" + keys "github.com/akash-network/node/x/market/keeper/keys/v1beta4" ) // ValidateGenesis does validation check of the Genesis @@ -30,8 +32,42 @@ func DefaultGenesisState() *types.GenesisState { } // InitGenesis initiate genesis state and return updated validator details -func InitGenesis(ctx sdk.Context, keeper keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { - keeper.SetParams(ctx, data.Params) +func InitGenesis(ctx sdk.Context, kpr keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { + store := ctx.KVStore(kpr.StoreKey()) + cdc := kpr.Codec() + + for _, record := range data.Orders { + key := keys.OrderKey(record.ID()) + + if store.Has(key) { + panic(fmt.Errorf("market genesis orders init. order id %s: %w", record.ID(), types.ErrOrderExists)) + } + + store.Set(key, cdc.MustMarshal(&record)) + } + + for _, record := range data.Bids { + key := keys.BidKey(record.ID()) + + if store.Has(key) { + panic(fmt.Errorf("market genesis bids init. bid id %s: %w", record.ID(), types.ErrBidExists)) + } + + store.Set(key, cdc.MustMarshal(&record)) + } + + for _, record := range data.Leases { + key := keys.LeaseKey(record.ID()) + + if store.Has(key) { + panic(fmt.Errorf("market genesis leases init. order id %s: lease exists", record.ID())) + } + + store.Set(key, cdc.MustMarshal(&record)) + } + + kpr.SetParams(ctx, data.Params) + return []abci.ValidatorUpdate{} } diff --git a/x/provider/genesis.go b/x/provider/genesis.go index 96985bf044..5756c4c27c 100644 --- a/x/provider/genesis.go +++ b/x/provider/genesis.go @@ -2,6 +2,7 @@ package provider import ( "encoding/json" + "fmt" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,11 +15,42 @@ import ( // ValidateGenesis does validation check of the Genesis and returns error in case of failure func ValidateGenesis(data *types.GenesisState) error { + for _, record := range data.Providers { + msg := types.MsgCreateProvider{ + Owner: record.Owner, + HostURI: record.HostURI, + Attributes: record.Attributes, + Info: record.Info, + } + + if err := msg.ValidateBasic(); err != nil { + return err + } + + } return nil } // InitGenesis initiate genesis state and return updated validator details -func InitGenesis(ctx sdk.Context, keeper keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { +func InitGenesis(ctx sdk.Context, kpr keeper.IKeeper, data *types.GenesisState) []abci.ValidatorUpdate { + store := ctx.KVStore(kpr.StoreKey()) + cdc := kpr.Codec() + + for _, record := range data.Providers { + owner, err := sdk.AccAddressFromBech32(record.Owner) + if err != nil { + panic(fmt.Sprintf("provider genesis init: %s", err.Error())) + } + + key := keeper.ProviderKey(owner) + + if store.Has(key) { + panic(fmt.Sprintf("provider genesis init: %s", types.ErrProviderExists.Error())) + } + + store.Set(key, cdc.MustMarshal(&record)) + } + return []abci.ValidatorUpdate{} } @@ -28,7 +60,7 @@ func ExportGenesis(ctx sdk.Context, k keeper.IKeeper) *types.GenesisState { k.WithProviders(ctx, func(provider types.Provider) bool { providers = append(providers, provider) - return true + return false }) return &types.GenesisState{ diff --git a/x/provider/keeper/keeper.go b/x/provider/keeper/keeper.go index e42c07d685..9a25bfa81c 100644 --- a/x/provider/keeper/keeper.go +++ b/x/provider/keeper/keeper.go @@ -49,7 +49,7 @@ func (k Keeper) StoreKey() sdk.StoreKey { // Get returns a provider with given provider id func (k Keeper) Get(ctx sdk.Context, id sdk.Address) (types.Provider, bool) { store := ctx.KVStore(k.skey) - key := providerKey(id) + key := ProviderKey(id) if !store.Has(key) { return types.Provider{}, false @@ -69,7 +69,7 @@ func (k Keeper) Create(ctx sdk.Context, provider types.Provider) error { return err } - key := providerKey(owner) + key := ProviderKey(owner) if store.Has(key) { return types.ErrProviderExists @@ -106,7 +106,7 @@ func (k Keeper) Update(ctx sdk.Context, provider types.Provider) error { return err } - key := providerKey(owner) + key := ProviderKey(owner) if !store.Has(key) { return types.ErrProviderNotFound diff --git a/x/provider/keeper/key.go b/x/provider/keeper/key.go index c5c121a2a3..04a87a4ea3 100644 --- a/x/provider/keeper/key.go +++ b/x/provider/keeper/key.go @@ -5,6 +5,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/address" ) -func providerKey(id sdk.Address) []byte { +func ProviderKey(id sdk.Address) []byte { return address.MustLengthPrefix(id.Bytes()) }