diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml index 5f2a2df4..d00e542c 100644 --- a/.github/workflows/integration_test.yml +++ b/.github/workflows/integration_test.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 env: - EVNODE_VERSION: "v1.0.0-beta.4" + EVNODE_VERSION: "v1.0.0-beta.5" IGNITE_VERSION: "v29.4.0" IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) EVOLVE_IMAGE_REPO: "evolve-gm" @@ -59,7 +59,7 @@ jobs: timeout-minutes: 30 env: DO_NOT_TRACK: true - EVNODE_VERSION: "v1.0.0-beta.4" + EVNODE_VERSION: "v1.0.0-beta.5" IGNITE_VERSION: "v29.4.0" IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) outputs: @@ -266,7 +266,7 @@ jobs: GMD_HOME: ${{ needs.liveness.outputs.gmd_home }} HERMES_VERSION: "v1.13.1" GAIA_VERSION: "v25.1.0" - EVNODE_VERSION: "v1.0.0-beta.4" + EVNODE_VERSION: "v1.0.0-beta.5" EVNODE_DA_VERSION: "v1.0.0-beta.1" steps: - name: Set up Go diff --git a/.github/workflows/migration_test.yml b/.github/workflows/migration_test.yml index 2181132c..503e9520 100644 --- a/.github/workflows/migration_test.yml +++ b/.github/workflows/migration_test.yml @@ -13,7 +13,7 @@ jobs: timeout-minutes: 45 env: DO_NOT_TRACK: true - EVNODE_VERSION: "v1.0.0-beta.4" + EVNODE_VERSION: "v1.0.0-beta.5" IGNITE_VERSION: "v29.4.0" IGNITE_EVOLVE_APP_VERSION: "main" # use tagged when apps has tagged (blocked on things) steps: diff --git a/Dockerfile b/Dockerfile index 0775edf9..870fac78 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ RUN apk add --no-cache \ bash # Set environment variables -ENV EVNODE_VERSION=v1.0.0-beta.4 +ENV EVNODE_VERSION=v1.0.0-beta.5 ENV IGNITE_VERSION=v29.3.1 ENV IGNITE_EVOLVE_APP_VERSION=main diff --git a/go.mod b/go.mod index 0f5caae0..9b359907 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,12 @@ module github.com/evstack/ev-abci -go 1.24.2 +go 1.24.6 + +replace github.com/celestiaorg/go-header => github.com/julienrbrt/go-header v0.0.0-20250909151551-cb11b091bf58 // TODO: to remove after https://github.com/celestiaorg/go-header/pull/347 replace ( github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.0-beta github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.50.14 - github.com/ipfs/go-datastore => github.com/celestiaorg/go-datastore v0.0.0-20250801131506-48a63ae531e4 ) exclude github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 @@ -26,7 +27,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.50.14 github.com/cosmos/gogoproto v1.7.0 - github.com/evstack/ev-node v1.0.0-beta.4 + github.com/evstack/ev-node v1.0.0-beta.5 github.com/evstack/ev-node/core v1.0.0-beta.3 github.com/evstack/ev-node/da v1.0.0-beta.3 github.com/evstack/ev-node/sequencers/single v1.0.0-beta.2 @@ -34,7 +35,7 @@ require ( github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.4 - github.com/ipfs/go-datastore v0.8.3 + github.com/ipfs/go-datastore v0.9.0 github.com/libp2p/go-libp2p v0.43.0 github.com/libp2p/go-libp2p-pubsub v0.15.0 github.com/multiformats/go-multiaddr v0.16.1 @@ -86,7 +87,7 @@ require ( github.com/bytedance/sonic v1.14.0 // indirect github.com/bytedance/sonic/loader v0.3.0 // indirect github.com/celestiaorg/go-libp2p-messenger v0.2.2 // indirect - github.com/celestiaorg/go-square/v2 v2.3.3 // indirect + github.com/celestiaorg/go-square/v3 v3.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudwego/base64x v0.1.5 // indirect @@ -307,9 +308,9 @@ require ( go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/dig v1.19.0 // indirect go.uber.org/fx v1.24.0 // indirect go.uber.org/mock v0.5.2 // indirect diff --git a/go.sum b/go.sum index e7e805a8..a04b752d 100644 --- a/go.sum +++ b/go.sum @@ -137,14 +137,10 @@ github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4 github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/celestiaorg/go-datastore v0.0.0-20250801131506-48a63ae531e4 h1:udw77BU45zmvTV7798FhR1wHFmsFpu4GnA5mubtMcR0= -github.com/celestiaorg/go-datastore v0.0.0-20250801131506-48a63ae531e4/go.mod h1:W+pI1NsUsz3tcsAACMtfC+IZdnQTnC/7VfPoJBQuts0= -github.com/celestiaorg/go-header v0.7.2 h1:Jw01iBKnodfsILzynDCU3C11xurpoBt5SI9lgyKHJc0= -github.com/celestiaorg/go-header v0.7.2/go.mod h1:eX9iTSPthVEAlEDLux40ZT/olXPGhpxHd+mEzJeDhd0= github.com/celestiaorg/go-libp2p-messenger v0.2.2 h1:osoUfqjss7vWTIZrrDSy953RjQz+ps/vBFE7bychLEc= github.com/celestiaorg/go-libp2p-messenger v0.2.2/go.mod h1:oTCRV5TfdO7V/k6nkx7QjQzGrWuJbupv+0o1cgnY2i4= -github.com/celestiaorg/go-square/v2 v2.3.3 h1:vhu6Lt39km19Q/Jk4nS3r2cuWJq6jFg+/1+iG8YGftY= -github.com/celestiaorg/go-square/v2 v2.3.3/go.mod h1:vY5RRv+qRmEVjPF6dAdr0dyLwKmTTDHHffENPQw8pUA= +github.com/celestiaorg/go-square/v3 v3.0.1 h1:44xnE3AUiZn/3q/uJ0c20AezFS0lywFTGG2lE/9jYKA= +github.com/celestiaorg/go-square/v3 v3.0.1/go.mod h1:Xc4ubl/7pbn/STD7w8Bnk/X1/PG3vk0ycOPW6tMOPX4= github.com/celestiaorg/utils v0.1.0 h1:WsP3O8jF7jKRgLNFmlDCwdThwOFMFxg0MnqhkLFVxPo= github.com/celestiaorg/utils v0.1.0/go.mod h1:vQTh7MHnvpIeCQZ2/Ph+w7K1R2UerDheZbgJEJD2hSU= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -294,8 +290,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evstack/ev-node v1.0.0-beta.4 h1:tOW+M7+ZbGnlP+op01OKbFlIuNv1KxrtCQhg+HsLyZc= -github.com/evstack/ev-node v1.0.0-beta.4/go.mod h1:ooOFcaglIwVsmrL+5Y318F4ZCyTogXA8Fh6L3T+jwNM= +github.com/evstack/ev-node v1.0.0-beta.5 h1:NAZ7FE725OQZicNFvTE/delGnLRDQoYe3a2Oba7GUlM= +github.com/evstack/ev-node v1.0.0-beta.5/go.mod h1:zdQYHWY37hetY+ySJeMgcFfCDIiJX44Ucl6V/f4JXSY= github.com/evstack/ev-node/core v1.0.0-beta.3 h1:01K2Ygm3puX4m2OBxvg/HDxu+he54jeNv+KDmpgujFc= github.com/evstack/ev-node/core v1.0.0-beta.3/go.mod h1:n2w/LhYQTPsi48m6lMj16YiIqsaQw6gxwjyJvR+B3sY= github.com/evstack/ev-node/da v1.0.0-beta.3 h1:jeJ2MOixjr5TnIiLSCtrim/Ulb/r4QIDSrovFO/MiGU= @@ -563,6 +559,8 @@ github.com/ipfs/go-block-format v0.2.2 h1:uecCTgRwDIXyZPgYspaLXoMiMmxQpSx2aq34eN github.com/ipfs/go-block-format v0.2.2/go.mod h1:vmuefuWU6b+9kIU0vZJgpiJt1yicQz9baHXE8qR+KB8= github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= +github.com/ipfs/go-datastore v0.9.0 h1:WocriPOayqalEsueHv6SdD4nPVl4rYMfYGLD4bqCZ+w= +github.com/ipfs/go-datastore v0.9.0/go.mod h1:uT77w/XEGrvJWwHgdrMr8bqCN6ZTW9gzmi+3uK+ouHg= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-ds-badger4 v0.1.8 h1:frNczf5CjCVm62RJ5mW5tD/oLQY/9IKAUpKviRV9QAI= @@ -600,6 +598,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienrbrt/go-header v0.0.0-20250909151551-cb11b091bf58 h1:FBGLvgA4hfRjjYHUiiya7KkGxcHQWSpdn2dRKUEDa5k= +github.com/julienrbrt/go-header v0.0.0-20250909151551-cb11b091bf58/go.mod h1:eX9iTSPthVEAlEDLux40ZT/olXPGhpxHd+mEzJeDhd0= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -1135,20 +1135,20 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= diff --git a/server/rollback_cmd.go b/server/rollback_cmd.go index 8cbfaad6..7d54c36b 100644 --- a/server/rollback_cmd.go +++ b/server/rollback_cmd.go @@ -21,7 +21,11 @@ import ( // NewRollbackCmd creates a command to rollback CometBFT and multistore state by one height. func NewRollbackCmd(appCreator types.AppCreator, defaultNodeHome string) *cobra.Command { - var height uint64 + var ( + height uint64 + syncNode bool + skipP2PStores bool + ) openDB := func(rootDir string, backendType dbm.BackendType) (dbm.DB, error) { dataDir := filepath.Join(rootDir, "data") @@ -80,10 +84,20 @@ The application also rolls back to height n - 1. If a --height flag is specified } // rollback ev-node main state - if err := evolveStore.Rollback(goCtx, height); err != nil { + if err := evolveStore.Rollback(goCtx, height, !syncNode); err != nil { return fmt.Errorf("failed to rollback ev-node state: %w", err) } + // rollback the multistore + app := appCreator(ctx.Logger, db, nil, ctx.Viper) + if err := app.CommitMultiStore().RollbackToVersion(int64(height)); err != nil { + return fmt.Errorf("failed to rollback to version: %w", err) + } + + if skipP2PStores { + return printSuccess(height) + } + // rollback ev-node goheader state headerStore, err := goheaderstore.NewStore[*evtypes.SignedHeader]( evolveDB, @@ -121,25 +135,28 @@ The application also rolls back to height n - 1. If a --height flag is specified } }() - if err := headerStore.DeleteTo(goCtx, height); err != nil { + if err := headerStore.DeleteRange(goCtx, height+1, headerStore.Height()+1); err != nil { return fmt.Errorf("failed to rollback header sync service state: %w", err) } - if err := dataStore.DeleteTo(goCtx, height); err != nil { + if err := dataStore.DeleteRange(goCtx, height+1, dataStore.Height()+1); err != nil { return fmt.Errorf("failed to rollback data sync service state: %w", err) } - // rollback the multistore - app := appCreator(ctx.Logger, db, nil, ctx.Viper) - if err := app.CommitMultiStore().RollbackToVersion(int64(height)); err != nil { - return fmt.Errorf("failed to rollback to version: %w", err) - } - fmt.Printf("Rolled back state to height %d\n", height) - return nil + return printSuccess(height) }, } cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") cmd.Flags().Uint64Var(&height, flags.FlagHeight, 0, "rollback to a specific height") + cmd.Flags().BoolVar(&syncNode, "sync-node", false, "sync node (no aggregator)") + cmd.Flags().BoolVar(&skipP2PStores, "skip-p2p-stores", false, "skip rollback p2p stores (goheaderstore)") + return cmd } + +func printSuccess(height uint64) error { + fmt.Printf("Rolled back ev-node state to height %d\n", height) + fmt.Println("Restart the node with the `--clear-cache` flag") + return nil +}