From 309a2800ef7c44ee766805406f27a9cca9f47681 Mon Sep 17 00:00:00 2001 From: Piotr Skamruk Date: Wed, 18 Sep 2024 10:05:06 +0000 Subject: [PATCH 01/73] Minor improvements to README.md (#6333) ## Motivation Minor improvements to README.md. --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2f3fb38e7c..19c2ea40e4 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,8 @@ or [mingw](https://chocolatey.org/packages/mingw). Ensure that `$GOPATH` is set correctly and that the `$GOPATH/bin` directory appears in `$PATH`. +Ensure that you have installed [git-lfs](https://git-lfs.com/). + Before building we need to set up the golang environment. Do this by running: ```bash @@ -124,9 +126,10 @@ make go-env-test ``` **CGO_CFLAGS** must be set to "-I/go-spacemesh/build/ -DSQLITE_ENABLE_DBSTAT_VTAB=1" + **CGO_LDFLAGS** must be set to "-L/go-spacemesh/build/ -Wl,-rpath,$ORIGIN -Wl,-rpath,/go-spacemesh/build/" -Make sure you have **OpenCL** library installed +Make sure you have **OpenCL** library installed. To check if setup was configured successfully, try to run: ```bash @@ -178,7 +181,7 @@ The environment variables can be printed by running either `make print-env` or They can be set in 3 ways: -_Note: we need to use eval to interpret the commands since there are spaces in +_Note: we need to use `eval` to interpret the commands since there are spaces in the values of the variables so the shell can't correctly split them as arguments._ @@ -243,7 +246,7 @@ behavior and override default values. 1. Run go-spacemesh to join a testnet without mining (see above). 2. Run the CLI Wallet to create a coinbase account. Save your coinbase account public address - you'll need it later. -3. Stop go-spacemesh and start it with the following params: +3. Stop go-spacemesh and start it with the following parameters: ```bash ./go-spacemesh --listen [a_multiaddr] --config [configFileLocation] -d [nodeDataFilesPath] \ @@ -297,7 +300,7 @@ To disable the internal PoST service and disable smeshing on your node you can u or use the `--smeshing-start=false` flag. Additionally rename the `local.key` in your `data/identities` folder to a unique name for your node (e.g. `nodeA.key`). This will disable smeshing on your node causing, i.e. it will not generate -any PoST proofs until a remote post service connects. Be aware that you still need to set your coinbase via +any PoST proofs until a remote post service connects. Be aware that you still need to set your coinbase via: ```json "smeshing": { From 3053dcafb09f5b6130b731e6aee14db91c695dca Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Fri, 20 Sep 2024 08:38:55 +0000 Subject: [PATCH 02/73] atx: cache poet proofs with lru (#6336) followup for https://github.com/spacemeshos/go-spacemesh/pull/6326 in current code poet proofs are fetched for every atx submitted to the node, they are relatively large (140KB) and account for sizeable chunk of all reads executed on the atx handler codepath (25%). they are also a perfect case for lru caching, they are mostly reused and replaced from epoch to epoch. basic stats in recent epochs. ``` select round_id, count(*), max(length(poet)) from poets group by round_id; 25|42|146200 26|45|145936 27|45|145738 28|45|145903 ``` --- activation/activation.go | 2 + activation/poetdb.go | 77 +++++++++++++++++++++++++++++++++------ config/mainnet.go | 1 + config/presets/testnet.go | 1 + node/node.go | 5 ++- 5 files changed, 74 insertions(+), 12 deletions(-) diff --git a/activation/activation.go b/activation/activation.go index 8c1188f70f..b77619d439 100644 --- a/activation/activation.go +++ b/activation/activation.go @@ -54,6 +54,7 @@ type PoetConfig struct { InfoCacheTTL time.Duration `mapstructure:"info-cache-ttl"` PowParamsCacheTTL time.Duration `mapstructure:"pow-params-cache-ttl"` MaxRequestRetries int `mapstructure:"retry-max"` + PoetProofsCache int `mapstructure:"poet-proofs-cache"` } func DefaultPoetConfig() PoetConfig { @@ -62,6 +63,7 @@ func DefaultPoetConfig() PoetConfig { MaxRequestRetries: 10, InfoCacheTTL: 5 * time.Minute, PowParamsCacheTTL: 5 * time.Minute, + PoetProofsCache: 200, } } diff --git a/activation/poetdb.go b/activation/poetdb.go index 3905564f89..c676e5ce38 100644 --- a/activation/poetdb.go +++ b/activation/poetdb.go @@ -5,11 +5,13 @@ import ( "encoding/hex" "fmt" + lru "github.com/hashicorp/golang-lru/v2" "github.com/spacemeshos/merkle-tree" "github.com/spacemeshos/poet/hash" "github.com/spacemeshos/poet/shared" "github.com/spacemeshos/poet/verifier" "go.uber.org/zap" + "golang.org/x/sync/singleflight" "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" @@ -19,19 +21,59 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/poets" ) +// PoetDbOptions are options for PoetDb. +type PoetDbOptions struct { + cacheSize int +} + +type PoetDbOption func(*PoetDbOptions) + +// WithCacheSize sets the cache size for PoetDb. +func WithCacheSize(size int) PoetDbOption { + return func(opts *PoetDbOptions) { + opts.cacheSize = size + } +} + // PoetDb is a database for PoET proofs. type PoetDb struct { - sqlDB sql.StateDatabase - logger *zap.Logger + sqlDB sql.StateDatabase + poetProofsDbRequest singleflight.Group + poetProofsLru *lru.Cache[types.PoetProofRef, *types.PoetProofMessage] + logger *zap.Logger } // NewPoetDb returns a new PoET handler. -func NewPoetDb(db sql.StateDatabase, log *zap.Logger) *PoetDb { - return &PoetDb{sqlDB: db, logger: log} +func NewPoetDb(db sql.StateDatabase, log *zap.Logger, opts ...PoetDbOption) *PoetDb { + options := PoetDbOptions{ + // in last epochs there are 45 proofs per epoch, with each of them nearly 140KB + // 200 is set not to keep multiple epochs, but to account for unexpected growth + // select round_id, count(*), max(length(poet)) from poets group by round_id; + // 25|42|146200 + // 26|45|145936 + // 27|45|145738 + // 28|45|145903 + cacheSize: 200, + } + for _, opt := range opts { + opt(&options) + } + poetProofsLru, err := lru.New[types.PoetProofRef, *types.PoetProofMessage](options.cacheSize) + if err != nil { + log.Panic("failed to create PoET proofs LRU cache", zap.Error(err)) + } + return &PoetDb{ + sqlDB: db, + poetProofsLru: poetProofsLru, + logger: log, + } } // HasProof returns true if the database contains a proof with the given reference, or false otherwise. func (db *PoetDb) HasProof(proofRef types.PoetProofRef) bool { + if db.poetProofsLru.Contains(proofRef) { + return true + } has, err := poets.Has(db.sqlDB, proofRef) return err == nil && has } @@ -99,6 +141,7 @@ func (db *PoetDb) Validate( // StoreProof saves the poet proof in local db. func (db *PoetDb) StoreProof(ctx context.Context, ref types.PoetProofRef, proofMessage *types.PoetProofMessage) error { + db.poetProofsLru.Add(ref, proofMessage) messageBytes, err := codec.Encode(proofMessage) if err != nil { return fmt.Errorf("could not marshal proof message: %w", err) @@ -146,15 +189,27 @@ func (db *PoetDb) GetProofMessage(proofRef types.PoetProofRef) ([]byte, error) { // Proof returns full proof. func (db *PoetDb) Proof(proofRef types.PoetProofRef) (*types.PoetProof, *types.Hash32, error) { - proofMessageBytes, err := db.GetProofMessage(proofRef) + response, err, _ := db.poetProofsDbRequest.Do(string(proofRef[:]), func() (any, error) { + cachedProof, ok := db.poetProofsLru.Get(proofRef) + if ok && cachedProof != nil { + return cachedProof, nil + } + proofMessageBytes, err := db.GetProofMessage(proofRef) + if err != nil { + return nil, fmt.Errorf("could not fetch poet proof for ref %x: %w", proofRef, err) + } + var proofMessage types.PoetProofMessage + if err := codec.Decode(proofMessageBytes, &proofMessage); err != nil { + return nil, fmt.Errorf("failed to unmarshal poet proof for ref %x: %w", proofRef, err) + } + db.poetProofsLru.Add(proofRef, &proofMessage) + return &proofMessage, nil + }) if err != nil { - return nil, nil, fmt.Errorf("could not fetch poet proof for ref %x: %w", proofRef, err) - } - var proofMessage types.PoetProofMessage - if err := codec.Decode(proofMessageBytes, &proofMessage); err != nil { - return nil, nil, fmt.Errorf("failed to unmarshal poet proof for ref %x: %w", proofRef, err) + return nil, nil, err } - return &proofMessage.PoetProof, &proofMessage.Statement, nil + proof := response.(*types.PoetProofMessage) + return &proof.PoetProof, &proof.Statement, nil } func (db *PoetDb) ProofForRound(poetID []byte, roundID string) (*types.PoetProof, error) { diff --git a/config/mainnet.go b/config/mainnet.go index 3b1f8920f1..0add25c46b 100644 --- a/config/mainnet.go +++ b/config/mainnet.go @@ -173,6 +173,7 @@ func MainnetConfig() Config { RequestTimeout: 1100 * time.Second, RequestRetryDelay: 10 * time.Second, MaxRequestRetries: 10, + PoetProofsCache: 200, }, POST: activation.PostConfig{ MinNumUnits: 4, diff --git a/config/presets/testnet.go b/config/presets/testnet.go index af070e1068..f828bc12cc 100644 --- a/config/presets/testnet.go +++ b/config/presets/testnet.go @@ -126,6 +126,7 @@ func testnet() config.Config { InfoCacheTTL: 5 * time.Minute, PowParamsCacheTTL: 5 * time.Minute, + PoetProofsCache: 200, }, POST: activation.PostConfig{ MinNumUnits: 2, diff --git a/node/node.go b/node/node.go index 70ea73a48f..1ffcb89abf 100644 --- a/node/node.go +++ b/node/node.go @@ -580,7 +580,10 @@ func (app *App) initServices(ctx context.Context) error { layersPerEpoch := types.GetLayersPerEpoch() lg := app.log - poetDb := activation.NewPoetDb(app.db, app.addLogger(PoetDbLogger, lg).Zap()) + poetDb := activation.NewPoetDb( + app.db, + app.addLogger(PoetDbLogger, lg).Zap(), + activation.WithCacheSize(app.Config.POET.PoetProofsCache)) postStates := activation.NewPostStates(app.addLogger(PostLogger, lg).Zap()) opts := []activation.PostVerifierOpt{ activation.WithVerifyingOpts(app.Config.SMESHING.VerifyingOpts), From 062d40c0d7f0b8fbecac3cce9ffe40918ff51902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20R=C3=B3=C5=BCa=C5=84ski?= Date: Fri, 20 Sep 2024 15:11:50 +0000 Subject: [PATCH 03/73] Bump post-rs to 0.7.12 (#6323) ## Motivation Bump post-rs to the latest version [0.7.12](https://github.com/spacemeshos/post-rs/releases/tag/v0.7.12) --- Makefile-libs.Inc | 2 +- systest/Makefile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile-libs.Inc b/Makefile-libs.Inc index fd3016c798..82debfa0e9 100644 --- a/Makefile-libs.Inc +++ b/Makefile-libs.Inc @@ -47,7 +47,7 @@ else endif endif -POSTRS_SETUP_REV = 0.7.11 +POSTRS_SETUP_REV = 0.7.13 POSTRS_SETUP_ZIP = libpost-$(platform)-v$(POSTRS_SETUP_REV).zip POSTRS_SETUP_URL_ZIP ?= https://github.com/spacemeshos/post-rs/releases/download/v$(POSTRS_SETUP_REV)/$(POSTRS_SETUP_ZIP) diff --git a/systest/Makefile b/systest/Makefile index 6909ba7f61..c776efcfcc 100644 --- a/systest/Makefile +++ b/systest/Makefile @@ -5,9 +5,9 @@ tmpfile := $(shell mktemp /tmp/systest-XXX) test_name ?= TestSmeshing org ?= spacemeshos image_name ?= $(org)/systest:$(version_info) -certifier_image ?= spacemeshos/certifier-service:v0.7.11 +certifier_image ?= spacemeshos/certifier-service:v0.7.13 poet_image ?= $(org)/poet:v0.10.3 -post_service_image ?= $(org)/post-service:v0.7.11 +post_service_image ?= $(org)/post-service:v0.7.13 post_init_image ?= $(org)/postcli:v0.12.5 smesher_image ?= $(org)/go-spacemesh-dev:$(version_info) bs_image ?= $(org)/go-spacemesh-dev-bs:$(version_info) From ab88b6a6e1dc3e8065d80e8c5e95216735870e67 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:55:11 +0000 Subject: [PATCH 04/73] chore: Remove unused environment variable in CI step (#6343) ## Motivation `codecov/codecov-action@v4` doesn't need the defined environment variable, it gains access to the token via the `token` argument passed to it. --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cb59bc3547..d1afcb85f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -206,8 +206,6 @@ jobs: uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} unittests: runs-on: ${{ matrix.os }} From b93dd1eadbadfb5b808ab9980c63fab6950a6681 Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Mon, 23 Sep 2024 10:06:45 +0000 Subject: [PATCH 05/73] sync: refactor atxsync to avoid updates if same number of retries was persisted (#6344) ![image](https://github.com/user-attachments/assets/d1f07795-d5d3-4301-b5b8-8d9e091c5978) redundant updates causes a lot of overhead due to the number of atx being close to 6mil. see pprof above for approximate fraction of reads during sync. this is a simple change to make it much less wasteful until atx syncv2 lands --- sql/atxsync/atxsync.go | 47 ++++++++++++++++++++++++++++------- sql/atxsync/atxsync_test.go | 39 +++++++++++++++++++++++------ syncer/atxsync/syncer.go | 18 ++++++++------ syncer/atxsync/syncer_test.go | 7 +++--- 4 files changed, 83 insertions(+), 28 deletions(-) diff --git a/sql/atxsync/atxsync.go b/sql/atxsync/atxsync.go index 3c6047bd62..ea89f470a4 100644 --- a/sql/atxsync/atxsync.go +++ b/sql/atxsync/atxsync.go @@ -8,15 +8,43 @@ import ( "github.com/spacemeshos/go-spacemesh/sql" ) -func GetSyncState(db sql.Executor, epoch types.EpochID) (map[types.ATXID]int, error) { - states := map[types.ATXID]int{} +type EpochSyncState = map[types.ATXID]*IDSyncState + +func fromDatabase(tries int) *IDSyncState { + return &IDSyncState{ + Tries: tries, + persisted: true, + persistedTries: tries, + } +} + +// IDSyncState tracks how many times we tried to sync an ATX. +type IDSyncState struct { + Tries int + persisted bool + persistedTries int +} + +// TriesPersisted returns true if the number of tries is equal to the number of persisted tries. +func (s *IDSyncState) TriesPersisted() bool { + return s.persisted && s.persistedTries == s.Tries +} + +// SetPersisted sets the number of tries to the number of persisted tries. +func (s *IDSyncState) setPersisted() { + s.persisted = true + s.persistedTries = s.Tries +} + +func GetSyncState(db sql.Executor, epoch types.EpochID) (EpochSyncState, error) { + states := EpochSyncState{} _, err := db.Exec("select id, requests from atx_sync_state where epoch = ?1", func(stmt *sql.Statement) { stmt.BindInt64(1, int64(epoch)) }, func(stmt *sql.Statement) bool { var id types.ATXID stmt.ColumnBytes(0, id[:]) - states[id] = int(stmt.ColumnInt64(1)) + states[id] = fromDatabase(stmt.ColumnInt(1)) return true }) if err != nil { @@ -25,24 +53,25 @@ func GetSyncState(db sql.Executor, epoch types.EpochID) (map[types.ATXID]int, er return states, nil } -func SaveSyncState(db sql.Executor, epoch types.EpochID, states map[types.ATXID]int, max int) error { +func SaveSyncState(db sql.Executor, epoch types.EpochID, states EpochSyncState, max int) error { for id, requests := range states { var err error - if requests == max { + if requests.Tries == max { _, err = db.Exec(`delete from atx_sync_state where epoch = ?1 and id = ?2`, func(stmt *sql.Statement) { stmt.BindInt64(1, int64(epoch)) stmt.BindBytes(2, id[:]) }, nil) - } else { - _, err = db.Exec(`insert into atx_sync_state + } else if !requests.TriesPersisted() { + _, err = db.Exec(`insert into atx_sync_state (epoch, id, requests) values (?1, ?2, ?3) on conflict(epoch, id) do update set requests = ?3;`, func(stmt *sql.Statement) { stmt.BindInt64(1, int64(epoch)) stmt.BindBytes(2, id[:]) - stmt.BindInt64(3, int64(requests)) + stmt.BindInt64(3, int64(requests.Tries)) }, nil) } + requests.setPersisted() if err != nil { return fmt.Errorf("insert synced atx id %v/%v failed: %w", epoch, id.ShortString(), err) } @@ -51,7 +80,7 @@ func SaveSyncState(db sql.Executor, epoch types.EpochID, states map[types.ATXID] } func SaveRequest(db sql.Executor, epoch types.EpochID, timestamp time.Time, total, downloaded int64) error { - _, err := db.Exec(`insert into atx_sync_requests + _, err := db.Exec(`insert into atx_sync_requests (epoch, timestamp, total, downloaded) values (?1, ?2, ?3, ?4) on conflict(epoch) do update set timestamp = ?2, total = ?3, downloaded = ?4;`, func(stmt *sql.Statement) { diff --git a/sql/atxsync/atxsync_test.go b/sql/atxsync/atxsync_test.go index 6cdec240db..d64c25cb39 100644 --- a/sql/atxsync/atxsync_test.go +++ b/sql/atxsync/atxsync_test.go @@ -19,12 +19,12 @@ func TestSyncState(t *testing.T) { require.NoError(t, err) require.Empty(t, state) - states := map[types.ATXID]int{} + states := EpochSyncState{} const size = 100 for i := 0; i < size; i++ { id := types.ATXID{} binary.BigEndian.PutUint64(id[:], uint64(i)) - states[id] = 0 + states[id] = &IDSyncState{Tries: 0} } require.NoError(t, SaveSyncState(db, epoch, states, 1)) @@ -38,11 +38,11 @@ func TestSyncState(t *testing.T) { binary.BigEndian.PutUint64(id[:], uint64(i)) requests, exists := state[id] require.True(t, exists) - require.Equal(t, 0, requests) + require.Equal(t, 0, requests.Tries) if i < size/2 { - state[id] = 1 + state[id].Tries = 1 } else { - state[id] = max + state[id].Tries = max } } @@ -58,8 +58,33 @@ func TestSyncState(t *testing.T) { } } require.Equal(t, state, updated) + } +} + +func TestNoRedundantUpdates(t *testing.T) { + db := localsql.InMemory() + epochState := EpochSyncState{} + epochState[types.ATXID{1}] = &IDSyncState{Tries: 0} + epochState[types.ATXID{2}] = &IDSyncState{Tries: 0} + require.NoError(t, SaveSyncState(db, types.EpochID(1), epochState, 10)) + for _, requests := range epochState { + require.True(t, requests.TriesPersisted()) + } + // clear database to test that the next update won't happen + require.NoError(t, Clear(db)) + require.NoError(t, SaveSyncState(db, types.EpochID(1), epochState, 10)) + loaded, err := GetSyncState(db, types.EpochID(1)) + require.NoError(t, err) + require.Empty(t, loaded) + // now update epoch state and check that the update happens + for _, requests := range epochState { + requests.Tries = 1 } + require.NoError(t, SaveSyncState(db, types.EpochID(1), epochState, 10)) + loaded, err = GetSyncState(db, types.EpochID(1)) + require.NoError(t, err) + require.Equal(t, epochState, loaded) } func TestRequestTime(t *testing.T) { @@ -89,12 +114,12 @@ func TestClear(t *testing.T) { db := localsql.InMemory() // add some state for epoch := types.EpochID(1); epoch < types.EpochID(5); epoch++ { - states := map[types.ATXID]int{} + states := EpochSyncState{} const size = 100 for i := 0; i < size; i++ { id := types.ATXID{} binary.BigEndian.PutUint64(id[:], uint64(i)) - states[id] = 0 + states[id] = fromDatabase(1) } require.NoError(t, SaveSyncState(db, epoch, states, 1)) require.NoError(t, SaveRequest(db, epoch, time.Now(), 10, 10)) diff --git a/syncer/atxsync/syncer.go b/syncer/atxsync/syncer.go index 500473e3bc..0db08337dd 100644 --- a/syncer/atxsync/syncer.go +++ b/syncer/atxsync/syncer.go @@ -120,7 +120,7 @@ func (s *Syncer) Download(parent context.Context, publish types.EpochID, downloa eg, ctx := errgroup.WithContext(ctx) updates := make(chan epochUpdate, s.cfg.EpochInfoPeers) if len(state) == 0 { - state = map[types.ATXID]int{} + state = atxsync.EpochSyncState{} } else { updates <- epochUpdate{time: lastSuccess, update: state} } @@ -195,9 +195,9 @@ func (s *Syncer) downloadEpochInfo( ) // adding hashes to fetcher is not useful as they overflow the cache and are not used // so we switch to asking best peers immediately - update := make(map[types.ATXID]int, len(epochData.AtxIDs)) + update := make(atxsync.EpochSyncState, len(epochData.AtxIDs)) for _, atx := range epochData.AtxIDs { - update[atx] = 0 + update[atx] = &atxsync.IDSyncState{Tries: 0} } select { case <-ctx.Done(): @@ -214,7 +214,7 @@ func (s *Syncer) downloadAtxs( ctx context.Context, publish types.EpochID, downloadUntil time.Time, - state map[types.ATXID]int, + state atxsync.EpochSyncState, updates <-chan epochUpdate, ) error { var ( @@ -277,7 +277,8 @@ func (s *Syncer) downloadAtxs( downloaded[atx] = true continue } - if requests >= s.cfg.RequestsLimit { + // drop from memory if we already persisted info that this atx is not available + if requests.Tries >= s.cfg.RequestsLimit && requests.TriesPersisted() { delete(state, atx) continue } @@ -317,9 +318,10 @@ func (s *Syncer) downloadAtxs( continue } if errors.Is(err, pubsub.ErrValidationReject) { - state[types.ATXID(hash)] = s.cfg.RequestsLimit + // if atx invalid there is no pointing in re-downloading it again + state[types.ATXID(hash)].Tries = s.cfg.RequestsLimit } else { - state[types.ATXID(hash)]++ + state[types.ATXID(hash)].Tries++ } } } @@ -341,5 +343,5 @@ func (s *Syncer) downloadAtxs( type epochUpdate struct { time time.Time - update map[types.ATXID]int + update atxsync.EpochSyncState } diff --git a/syncer/atxsync/syncer_test.go b/syncer/atxsync/syncer_test.go index fb75373b1b..657170428c 100644 --- a/syncer/atxsync/syncer_test.go +++ b/syncer/atxsync/syncer_test.go @@ -125,10 +125,9 @@ func TestSyncer(t *testing.T) { publish := types.EpochID(2) now := time.Now() - state := map[types.ATXID]int{ - aid("1"): 0, - aid("2"): 0, - } + state := atxsync.EpochSyncState{} + state[aid("1")] = &atxsync.IDSyncState{Tries: 0} + state[aid("2")] = &atxsync.IDSyncState{Tries: 0} require.NoError(t, atxsync.SaveSyncState(tester.localdb, publish, state, tester.cfg.AtxsBatch)) lastSuccess := now.Add(time.Minute) require.NoError(t, atxsync.SaveRequest(tester.localdb, publish, lastSuccess, 2, 2)) From 0e84c0ae93e5f9e929b03ce5baf18c84a256ae0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:23:12 +0000 Subject: [PATCH 06/73] build(deps): Bump google.golang.org/grpc from 1.66.2 to 1.67.0 (#6342) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index d4f923d927..4b42b0f526 100644 --- a/go.mod +++ b/go.mod @@ -59,7 +59,7 @@ require ( golang.org/x/sync v0.8.0 golang.org/x/time v0.6.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 - google.golang.org/grpc v1.66.2 + google.golang.org/grpc v1.67.0 google.golang.org/protobuf v1.34.2 k8s.io/api v0.31.1 k8s.io/apimachinery v0.31.1 @@ -71,7 +71,7 @@ require ( cloud.google.com/go v0.115.0 // indirect cloud.google.com/go/auth v0.6.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect - cloud.google.com/go/compute/metadata v0.3.0 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect cloud.google.com/go/iam v1.1.8 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/anacrolix/chansync v0.3.0 // indirect diff --git a/go.sum b/go.sum index bd9837e52c..a44068cc0b 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ cloud.google.com/go/auth v0.6.1 h1:T0Zw1XM5c1GlpN2HYr2s+m3vr1p2wy+8VN+Z1FKxW38= cloud.google.com/go/auth v0.6.1/go.mod h1:eFHG7zDzbXHKmjJddFG/rBlcGp6t25SwRUiEQSlO4x4= cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= @@ -920,8 +920,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 94db9f81d33dcb08e0963d4b03c452880992a16c Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:20:22 +0000 Subject: [PATCH 07/73] chore: refactor panics into error handling (#6345) ## Motivation Updated some places where `log.Panic` is used and replaced it by returning the error, callers already handle them. --- activation/e2e/activation_test.go | 3 +- activation/e2e/atx_merge_test.go | 3 +- activation/e2e/builds_atx_v2_test.go | 3 +- activation/e2e/checkpoint_merged_test.go | 6 ++-- activation/e2e/checkpoint_test.go | 6 ++-- activation/e2e/nipost_test.go | 6 ++-- activation/e2e/validation_test.go | 3 +- activation/poet_client_test.go | 3 +- activation/poetdb.go | 6 ++-- activation/poetdb_test.go | 18 ++++++----- fetch/cache.go | 8 ++--- fetch/cache_test.go | 21 ++++++++----- fetch/fetch.go | 12 +++++-- fetch/fetch_test.go | 31 ++++++++++++++----- fetch/mesh_data_test.go | 3 +- fetch/p2p_test.go | 20 +++++++++--- node/node.go | 13 ++++++-- .../distributed_post_verification_test.go | 3 +- systest/tests/poets_test.go | 8 ++--- 19 files changed, 118 insertions(+), 58 deletions(-) diff --git a/activation/e2e/activation_test.go b/activation/e2e/activation_test.go index 1472f4453c..e6d7b91451 100644 --- a/activation/e2e/activation_test.go +++ b/activation/e2e/activation_test.go @@ -117,7 +117,8 @@ func Test_BuilderWithMultipleClients(t *testing.T) { ) certClient := activation.NewCertifierClient(db, localDB, logger.Named("certifier")) certifier := activation.NewCertifier(localDB, logger, certClient) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) client, err := poetProver.Client(poetDb, poetCfg, logger, activation.WithCertifier(certifier)) require.NoError(t, err) diff --git a/activation/e2e/atx_merge_test.go b/activation/e2e/atx_merge_test.go index 8b1fdab98c..e7afde89a4 100644 --- a/activation/e2e/atx_merge_test.go +++ b/activation/e2e/atx_merge_test.go @@ -220,7 +220,8 @@ func Test_MarryAndMerge(t *testing.T) { verifier, err := activation.NewPostVerifier(cfg, logger, activation.WithVerifyingOpts(verifyingOpts)) require.NoError(t, err) t.Cleanup(func() { assert.NoError(t, verifier.Close()) }) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) validator := activation.NewValidator(db, poetDb, cfg, opts.Scrypt, verifier) eg, ctx := errgroup.WithContext(context.Background()) diff --git a/activation/e2e/builds_atx_v2_test.go b/activation/e2e/builds_atx_v2_test.go index af8fad6a55..607f99b4b8 100644 --- a/activation/e2e/builds_atx_v2_test.go +++ b/activation/e2e/builds_atx_v2_test.go @@ -65,7 +65,8 @@ func TestBuilder_SwitchesToBuildV2(t *testing.T) { initPost(t, cfg, opts, sig, goldenATX, grpcCfg, svc) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) verifier, err := activation.NewPostVerifier(cfg, logger.Named("verifier")) require.NoError(t, err) t.Cleanup(func() { assert.NoError(t, verifier.Close()) }) diff --git a/activation/e2e/checkpoint_merged_test.go b/activation/e2e/checkpoint_merged_test.go index 970ac803b3..21e5c0af27 100644 --- a/activation/e2e/checkpoint_merged_test.go +++ b/activation/e2e/checkpoint_merged_test.go @@ -57,7 +57,8 @@ func Test_CheckpointAfterMerge(t *testing.T) { verifier, err := activation.NewPostVerifier(cfg, logger, activation.WithVerifyingOpts(verifyingOpts)) require.NoError(t, err) t.Cleanup(func() { assert.NoError(t, verifier.Close()) }) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) validator := activation.NewValidator(db, poetDb, cfg, opts.Scrypt, verifier) eg, ctx := errgroup.WithContext(context.Background()) @@ -280,7 +281,8 @@ func Test_CheckpointAfterMerge(t *testing.T) { require.Equal(t, marriageATX.ID(), *checkpointedMerged.MarriageATX) // 4. Spawn new ATX handler and builder using the new DB - poetDb = activation.NewPoetDb(newDB, logger.Named("poetDb")) + poetDb, err = activation.NewPoetDb(newDB, logger.Named("poetDb")) + require.NoError(t, err) cdb = datastore.NewCachedDB(newDB, logger) poetSvc = activation.NewPoetServiceWithClient(poetDb, client, poetCfg, logger) diff --git a/activation/e2e/checkpoint_test.go b/activation/e2e/checkpoint_test.go index 0e28ee72d9..a9018c8fcb 100644 --- a/activation/e2e/checkpoint_test.go +++ b/activation/e2e/checkpoint_test.go @@ -58,7 +58,8 @@ func TestCheckpoint_PublishingSoloATXs(t *testing.T) { initPost(t, cfg, opts, sig, goldenATX, grpcCfg, svc) syncer := syncedSyncer(t) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) verifier, err := activation.NewPostVerifier(cfg, logger.Named("verifier")) require.NoError(t, err) t.Cleanup(func() { assert.NoError(t, verifier.Close()) }) @@ -186,7 +187,8 @@ func TestCheckpoint_PublishingSoloATXs(t *testing.T) { defer newDB.Close() // 3. Spawn new ATX handler and builder using the new DB - poetDb = activation.NewPoetDb(newDB, logger.Named("poetDb")) + poetDb, err = activation.NewPoetDb(newDB, logger.Named("poetDb")) + require.NoError(t, err) cdb = datastore.NewCachedDB(newDB, logger) atxdata, err = atxsdata.Warm(newDB, 1, logger) poetService = activation.NewPoetServiceWithClient(poetDb, client, poetCfg, logger) diff --git a/activation/e2e/nipost_test.go b/activation/e2e/nipost_test.go index 61891ac2aa..35f9505b17 100644 --- a/activation/e2e/nipost_test.go +++ b/activation/e2e/nipost_test.go @@ -188,7 +188,8 @@ func TestNIPostBuilderWithClients(t *testing.T) { require.NoError(t, err) t.Cleanup(func() { assert.NoError(t, verifier.Close()) }) - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) postClient, err := svc.Client(sig.NodeID()) require.NoError(t, err) @@ -271,7 +272,8 @@ func Test_NIPostBuilderWithMultipleClients(t *testing.T) { GracePeriod: epoch / 4, } - poetDb := activation.NewPoetDb(db, logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(db, logger.Named("poetDb")) + require.NoError(t, err) client := ae2e.NewTestPoetClient(len(signers), poetCfg) poetService := activation.NewPoetServiceWithClient(poetDb, client, poetCfg, logger) diff --git a/activation/e2e/validation_test.go b/activation/e2e/validation_test.go index 0880f2346f..3979d47e74 100644 --- a/activation/e2e/validation_test.go +++ b/activation/e2e/validation_test.go @@ -50,7 +50,8 @@ func TestValidator_Validate(t *testing.T) { GracePeriod: epoch / 4, } - poetDb := activation.NewPoetDb(statesql.InMemory(), logger.Named("poetDb")) + poetDb, err := activation.NewPoetDb(statesql.InMemory(), logger.Named("poetDb")) + require.NoError(t, err) client := ae2e.NewTestPoetClient(1, poetCfg) poetService := activation.NewPoetServiceWithClient(poetDb, client, poetCfg, logger) diff --git a/activation/poet_client_test.go b/activation/poet_client_test.go index d721d83612..247e8e3084 100644 --- a/activation/poet_client_test.go +++ b/activation/poet_client_test.go @@ -530,7 +530,8 @@ func TestPoetService_CachesCertifierInfo(t *testing.T) { cfg := DefaultPoetConfig() cfg.InfoCacheTTL = tc.ttl - db := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + db, err := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + require.NoError(t, err) url := &url.URL{Host: "certifier.hello"} pubkey := []byte("pubkey") diff --git a/activation/poetdb.go b/activation/poetdb.go index c676e5ce38..c1cf8ff275 100644 --- a/activation/poetdb.go +++ b/activation/poetdb.go @@ -44,7 +44,7 @@ type PoetDb struct { } // NewPoetDb returns a new PoET handler. -func NewPoetDb(db sql.StateDatabase, log *zap.Logger, opts ...PoetDbOption) *PoetDb { +func NewPoetDb(db sql.StateDatabase, log *zap.Logger, opts ...PoetDbOption) (*PoetDb, error) { options := PoetDbOptions{ // in last epochs there are 45 proofs per epoch, with each of them nearly 140KB // 200 is set not to keep multiple epochs, but to account for unexpected growth @@ -60,13 +60,13 @@ func NewPoetDb(db sql.StateDatabase, log *zap.Logger, opts ...PoetDbOption) *Poe } poetProofsLru, err := lru.New[types.PoetProofRef, *types.PoetProofMessage](options.cacheSize) if err != nil { - log.Panic("failed to create PoET proofs LRU cache", zap.Error(err)) + return nil, fmt.Errorf("create lru: %w", err) } return &PoetDb{ sqlDB: db, poetProofsLru: poetProofsLru, logger: log, - } + }, nil } // HasProof returns true if the database contains a proof with the given reference, or false otherwise. diff --git a/activation/poetdb_test.go b/activation/poetdb_test.go index 10fd77283e..b3889a0062 100644 --- a/activation/poetdb_test.go +++ b/activation/poetdb_test.go @@ -63,7 +63,8 @@ func getPoetProof(t *testing.T) types.PoetProofMessage { func TestPoetDbHappyFlow(t *testing.T) { r := require.New(t) msg := getPoetProof(t) - poetDb := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + poetDb, err := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + r.NoError(err) r.NoError(poetDb.Validate(msg.Statement[:], msg.PoetProof, msg.PoetServiceID, msg.RoundID, types.EmptyEdSignature)) ref, err := msg.Ref() @@ -83,10 +84,11 @@ func TestPoetDbHappyFlow(t *testing.T) { func TestPoetDbInvalidPoetProof(t *testing.T) { r := require.New(t) msg := getPoetProof(t) - poetDb := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + poetDb, err := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + r.NoError(err) msg.PoetProof.Root = []byte("some other root") - err := poetDb.Validate(msg.Statement[:], msg.PoetProof, msg.PoetServiceID, msg.RoundID, types.EmptyEdSignature) + err = poetDb.Validate(msg.Statement[:], msg.PoetProof, msg.PoetServiceID, msg.RoundID, types.EmptyEdSignature) r.EqualError( err, fmt.Sprintf( @@ -99,10 +101,11 @@ func TestPoetDbInvalidPoetProof(t *testing.T) { func TestPoetDbInvalidPoetStatement(t *testing.T) { r := require.New(t) msg := getPoetProof(t) - poetDb := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + poetDb, err := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + r.NoError(err) msg.Statement = types.CalcHash32([]byte("some other statement")) - err := poetDb.Validate(msg.Statement[:], msg.PoetProof, msg.PoetServiceID, msg.RoundID, types.EmptyEdSignature) + err = poetDb.Validate(msg.Statement[:], msg.PoetProof, msg.PoetServiceID, msg.RoundID, types.EmptyEdSignature) r.EqualError( err, fmt.Sprintf( @@ -115,9 +118,10 @@ func TestPoetDbInvalidPoetStatement(t *testing.T) { func TestPoetDbNonExistingKeys(t *testing.T) { r := require.New(t) msg := getPoetProof(t) - poetDb := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + poetDb, err := NewPoetDb(statesql.InMemory(), zaptest.NewLogger(t)) + r.NoError(err) - _, err := poetDb.GetProofRef(msg.PoetServiceID, "0") + _, err = poetDb.GetProofRef(msg.PoetServiceID, "0") r.EqualError( err, fmt.Sprintf( diff --git a/fetch/cache.go b/fetch/cache.go index 0562e3287d..543e7919f9 100644 --- a/fetch/cache.go +++ b/fetch/cache.go @@ -1,6 +1,7 @@ package fetch import ( + "fmt" "math/rand/v2" "sync" @@ -9,7 +10,6 @@ import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/datastore" - "github.com/spacemeshos/go-spacemesh/log" "github.com/spacemeshos/go-spacemesh/p2p" ) @@ -24,12 +24,12 @@ type HashPeersCache struct { type HashPeers map[p2p.Peer]struct{} // NewHashPeersCache creates a new hash-to-peers cache. -func NewHashPeersCache(size int) *HashPeersCache { +func NewHashPeersCache(size int) (*HashPeersCache, error) { cache, err := lru.New[types.Hash32, HashPeers](size) if err != nil { - log.Panic("could not initialize cache ", err) + return nil, fmt.Errorf("create lru: %w", err) } - return &HashPeersCache{Cache: cache} + return &HashPeersCache{Cache: cache}, nil } // get returns peers for a given hash (non-thread-safe). diff --git a/fetch/cache_test.go b/fetch/cache_test.go index 7482fbc935..5a0fd0b52d 100644 --- a/fetch/cache_test.go +++ b/fetch/cache_test.go @@ -25,7 +25,8 @@ func getCachedEntry(cache *HashPeersCache, hash types.Hash32) (HashPeers, bool) func TestAdd(t *testing.T) { t.Parallel() t.Run("1Hash3Peers", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash := types.RandomHash() peer1 := p2p.Peer("test_peer_1") peer2 := p2p.Peer("test_peer_2") @@ -49,7 +50,8 @@ func TestAdd(t *testing.T) { require.Len(t, hashPeers, 3) }) t.Run("2Hashes1Peer", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash1 := types.RandomHash() hash2 := types.RandomHash() peer := p2p.Peer("test_peer") @@ -74,7 +76,8 @@ func TestAdd(t *testing.T) { func TestGetRandom(t *testing.T) { t.Parallel() t.Run("no hash peers", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash := types.RandomHash() var seed [32]byte binary.LittleEndian.PutUint64(seed[:], uint64(time.Now().UnixNano())) @@ -83,7 +86,8 @@ func TestGetRandom(t *testing.T) { require.Empty(t, peers) }) t.Run("1Hash3Peers", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash := types.RandomHash() peer1 := p2p.Peer("test_peer_1") peer2 := p2p.Peer("test_peer_2") @@ -110,7 +114,8 @@ func TestGetRandom(t *testing.T) { require.ElementsMatch(t, []p2p.Peer{peer1, peer2, peer3}, peers) }) t.Run("2Hashes1Peer", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash1 := types.RandomHash() hash2 := types.RandomHash() peer := p2p.Peer("test_peer") @@ -138,7 +143,8 @@ func TestGetRandom(t *testing.T) { func TestRegisterPeerHashes(t *testing.T) { t.Parallel() t.Run("1Hash2Peers", func(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash1 := types.RandomHash() hash2 := types.RandomHash() hash3 := types.RandomHash() @@ -154,7 +160,8 @@ func TestRegisterPeerHashes(t *testing.T) { } func TestRace(t *testing.T) { - cache := NewHashPeersCache(10) + cache, err := NewHashPeersCache(10) + require.NoError(t, err) hash := types.RandomHash() peer1 := p2p.Peer("test_peer_1") peer2 := p2p.Peer("test_peer_2") diff --git a/fetch/fetch.go b/fetch/fetch.go index 94e93caea6..967dbfac67 100644 --- a/fetch/fetch.go +++ b/fetch/fetch.go @@ -5,6 +5,7 @@ import ( "context" "encoding/binary" "errors" + "fmt" "io" "math/rand/v2" "sync" @@ -268,9 +269,14 @@ func NewFetch( proposals *store.Store, host *p2p.Host, opts ...Option, -) *Fetch { +) (*Fetch, error) { bs := datastore.NewBlobStore(cdb, proposals) + hashPeerCache, err := NewHashPeersCache(cacheSize) + if err != nil { + // this should never happen, since cacheSize is a constant, but just in case + panic(fmt.Errorf("create hash peer cache: %w", err)) + } f := &Fetch{ cfg: DefaultConfig(), logger: zap.NewNop(), @@ -279,7 +285,7 @@ func NewFetch( servers: map[string]requester{}, unprocessed: make(map[types.Hash32]*request), ongoing: make(map[types.Hash32]*request), - hashToPeers: NewHashPeersCache(cacheSize), + hashToPeers: hashPeerCache, } for _, opt := range opts { opt(f) @@ -341,7 +347,7 @@ func NewFetch( f.registerServer(host, lyrDataProtocol, server.WrapHandler(h.handleLayerDataReq)) f.registerServer(host, OpnProtocol, server.WrapHandler(h.handleLayerOpinionsReq2)) } - return f + return f, nil } func (f *Fetch) registerServer( diff --git a/fetch/fetch_test.go b/fetch/fetch_test.go index d136cb4ac0..5a693efe0e 100644 --- a/fetch/fetch_test.go +++ b/fetch/fetch_test.go @@ -78,10 +78,13 @@ func createFetch(tb testing.TB) *testFetch { MaxRetriesForRequest: 3, GetAtxsConcurrency: DefaultConfig().GetAtxsConcurrency, } - lg := zaptest.NewLogger(tb) - tf.Fetch = NewFetch(datastore.NewCachedDB(statesql.InMemory(), lg), store.New(), nil, - WithContext(context.TODO()), + lg := zaptest.NewLogger(tb) + fetch, err := NewFetch( + datastore.NewCachedDB(statesql.InMemory(), lg), + store.New(), + nil, + WithContext(context.Background()), WithConfig(cfg), WithLogger(lg), withServers(map[string]requester{ @@ -92,7 +95,11 @@ func createFetch(tb testing.TB) *testFetch { meshHashProtocol: tf.mMHashS, OpnProtocol: tf.mOpn2S, }), - withHost(tf.mh)) + withHost(tf.mh), + ) + require.NoError(tb, err) + + tf.Fetch = fetch tf.Fetch.SetValidators( tf.mAtxH, tf.mPoetH, @@ -117,14 +124,18 @@ func badReceiver(context.Context, types.Hash32, p2p.Peer, []byte) error { func TestFetch_Start(t *testing.T) { lg := zaptest.NewLogger(t) - f := NewFetch(datastore.NewCachedDB(statesql.InMemory(), lg), store.New(), nil, - WithContext(context.TODO()), + f, err := NewFetch( + datastore.NewCachedDB(statesql.InMemory(), lg), + store.New(), + nil, + WithContext(context.Background()), WithConfig(DefaultConfig()), WithLogger(lg), withServers(map[string]requester{ malProtocol: nil, }), ) + require.NoError(t, err) require.ErrorIs(t, f.Start(), errValidatorsNotSet) } @@ -382,14 +393,18 @@ func TestFetch_PeerDroppedWhenMessageResultsInValidationReject(t *testing.T) { }) defer eg.Wait() - fetcher := NewFetch(datastore.NewCachedDB(statesql.InMemory(), lg), store.New(), h, + fetcher, err := NewFetch( + datastore.NewCachedDB(statesql.InMemory(), lg), + store.New(), + h, WithContext(ctx), WithConfig(cfg), WithLogger(lg), ) + require.NoError(t, err) t.Cleanup(fetcher.Stop) - // We set a validatior just for atxs, this validator does not drop connections + // We set a validator just for atxs, this validator does not drop connections vf := ValidatorFunc( func(context.Context, types.Hash32, peer.ID, []byte) error { return pubsub.ErrValidationReject }, ) diff --git a/fetch/mesh_data_test.go b/fetch/mesh_data_test.go index 3120544845..c00883d2c8 100644 --- a/fetch/mesh_data_test.go +++ b/fetch/mesh_data_test.go @@ -1003,11 +1003,12 @@ func Test_GetAtxsLimiting(t *testing.T) { client := server.New(wrapHost(mesh.Hosts()[0]), hashProtocol, nil) host, err := p2p.Upgrade(mesh.Hosts()[0]) require.NoError(t, err) - f := NewFetch(cdb, store.New(), host, + f, err := NewFetch(cdb, store.New(), host, WithContext(context.Background()), withServers(map[string]requester{hashProtocol: client}), WithConfig(cfg), ) + require.NoError(t, err) atxValidatorMock := mocks.NewMockSyncValidator(gomock.NewController(t)) f.validators = &dataValidators{ diff --git a/fetch/p2p_test.go b/fetch/p2p_test.go index 1e56fb703f..c5827d2c85 100644 --- a/fetch/p2p_test.go +++ b/fetch/p2p_test.go @@ -125,10 +125,16 @@ func createP2PFetch( receivedData: make(map[blobKey][]byte), } - tpf.serverFetch = NewFetch(tpf.serverCDB, tpf.serverPDB, serverHost, + fetcher, err := NewFetch( + tpf.serverCDB, + tpf.serverPDB, + serverHost, WithContext(ctx), WithConfig(p2pFetchCfg(serverStreaming)), - WithLogger(lg)) + WithLogger(lg), + ) + require.NoError(t, err) + tpf.serverFetch = fetcher vf := ValidatorFunc( func(context.Context, types.Hash32, peer.ID, []byte) error { return nil }, ) @@ -140,10 +146,16 @@ func createP2PFetch( return len(serverHost.Mux().Protocols()) != 0 }, 10*time.Second, 10*time.Millisecond) - tpf.clientFetch = NewFetch(tpf.clientCDB, tpf.clientPDB, clientHost, + fetcher, err = NewFetch( + tpf.clientCDB, + tpf.clientPDB, + clientHost, WithContext(ctx), WithConfig(p2pFetchCfg(clientStreaming)), - WithLogger(lg)) + WithLogger(lg), + ) + require.NoError(t, err) + tpf.clientFetch = fetcher tpf.clientFetch.SetValidators( mkFakeValidator(tpf, "atx"), mkFakeValidator(tpf, "poet"), diff --git a/node/node.go b/node/node.go index 1ffcb89abf..efd4f84110 100644 --- a/node/node.go +++ b/node/node.go @@ -580,10 +580,14 @@ func (app *App) initServices(ctx context.Context) error { layersPerEpoch := types.GetLayersPerEpoch() lg := app.log - poetDb := activation.NewPoetDb( + poetDb, err := activation.NewPoetDb( app.db, app.addLogger(PoetDbLogger, lg).Zap(), - activation.WithCacheSize(app.Config.POET.PoetProofsCache)) + activation.WithCacheSize(app.Config.POET.PoetProofsCache), + ) + if err != nil { + return fmt.Errorf("creating poet db: %w", err) + } postStates := activation.NewPostStates(app.addLogger(PostLogger, lg).Zap()) opts := []activation.PostVerifierOpt{ activation.WithVerifyingOpts(app.Config.SMESHING.VerifyingOpts), @@ -812,11 +816,14 @@ func (app *App) initServices(ctx context.Context) error { ) flog := app.addLogger(Fetcher, lg) - fetcher := fetch.NewFetch(app.cachedDB, proposalsStore, app.host, + fetcher, err := fetch.NewFetch(app.cachedDB, proposalsStore, app.host, fetch.WithContext(ctx), fetch.WithConfig(app.Config.FETCH), fetch.WithLogger(flog.Zap()), ) + if err != nil { + return fmt.Errorf("create fetcher: %w", err) + } fetcherWrapped.Fetcher = fetcher app.eg.Go(func() error { return blockssync.Sync(ctx, flog.Zap(), msh.MissingBlocks(), fetcher) diff --git a/systest/tests/distributed_post_verification_test.go b/systest/tests/distributed_post_verification_test.go index 911b9c9a50..f03e11dea1 100644 --- a/systest/tests/distributed_post_verification_test.go +++ b/systest/tests/distributed_post_verification_test.go @@ -160,7 +160,8 @@ func TestPostMalfeasanceProof(t *testing.T) { localDb := localsql.InMemory() certClient := activation.NewCertifierClient(db, localDb, logger.Named("certifier")) certifier := activation.NewCertifier(localDb, logger, certClient) - poetDb := activation.NewPoetDb(db, zap.NewNop()) + poetDb, err := activation.NewPoetDb(db, zap.NewNop()) + require.NoError(t, err) poetService, err := activation.NewPoetService( poetDb, types.PoetServer{ diff --git a/systest/tests/poets_test.go b/systest/tests/poets_test.go index 92d10d42c4..6f76be7eb6 100644 --- a/systest/tests/poets_test.go +++ b/systest/tests/poets_test.go @@ -4,7 +4,6 @@ import ( "crypto/ed25519" "encoding/base64" "encoding/hex" - "fmt" "math" "testing" @@ -198,11 +197,8 @@ func TestNodesUsingDifferentPoets(t *testing.T) { firstEpochWithEligibility := uint32(math.Max(2.0, float64(first/layersPerEpoch))) epochsInTest := last/layersPerEpoch - firstEpochWithEligibility + 1 for id, eligibleEpochs := range smeshers { - assert.Len( - t, - eligibleEpochs, - int(epochsInTest), - fmt.Sprintf("smesher ID: %v, its epochs: %v", hex.EncodeToString([]byte(id)), eligibleEpochs), + assert.Lenf(t, eligibleEpochs, int(epochsInTest), + "smesher ID: %v, its epochs: %v", hex.EncodeToString([]byte(id)), eligibleEpochs, ) } } From 486c24eb4758ed774eee6b8922a830a0e3663867 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Wed, 25 Sep 2024 08:14:11 +0000 Subject: [PATCH 08/73] Update CHANGELOG with latest changes (#6349) ## Motivation Add info about recent changes to `CHANGELOG.md` in preparation for release. --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bde38cf05..b5518306a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ See [RELEASE](./RELEASE.md) for workflow instructions. Ensure you are running v1.6.x before upgrading to v1.7.0, if you skip v1.6.x your node will not be able to fully migrate its local state. Upgrading from v1.6.x to v1.7.0 will require a time consuming database migration that optimizes how -the node stores at locally and will not allow you to downgrade to v1.6.x again. +the node stores state locally and will not allow you to downgrade to v1.6.x again. The upgrade process requires you +to have at least the same amount of free disk space as your current database size for the duration of the migration. The command line flag `--scan-malfeasant-atxs` has been removed. All malfeasant ATXs before 1.6.0 have been marked as such and the node will continue to scan new ATXs for their validity. @@ -22,7 +23,7 @@ migration, after which it will be freed again. The node will now continue to try to register at all configured PoETs until the end of the registration window instead of giving up on non-responding PoETs after 15-20 minutes. -Various minor improvements have been made to the node to improve performance and reduce the amount of log spam. +Various smaller improvements have been made to the node to improve performance and reduce the amount of log spam. ### Features @@ -53,6 +54,9 @@ are doing. * [#6274](https://github.com/spacemeshos/go-spacemesh/pull/6274) Additional queries to PoETs are now cached to reduce the number of requests made to PoET servers. +* [#6317](https://github.com/spacemeshos/go-spacemesh/pull/6317) Improved the proposal building process. This will + reduce the likelihood of nodes publishing proposals late in 1:N setups. + ## Release v1.6.8 ### Improvements From 2983c7135bbfb143c7eb7c73162771de16aeb0b8 Mon Sep 17 00:00:00 2001 From: Davi Mello Date: Wed, 25 Sep 2024 12:30:32 +0000 Subject: [PATCH 09/73] Fix the windows build artifacts name (#6351) ## Motivation Fix the windows build output --- Makefile-libs.Inc | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile-libs.Inc b/Makefile-libs.Inc index 82debfa0e9..aa3c7139a8 100644 --- a/Makefile-libs.Inc +++ b/Makefile-libs.Inc @@ -27,6 +27,7 @@ ifeq ($(GOOS),windows) platform := windows export PATH := $(PATH):$(BIN_DIR) CGO_LDFLAGS := $(CGO_LDFLAGS) -Wl,-Bstatic -lpthread -Wl,-Bdynamic + EXE := .exe else TEMP := /tmp ifeq ($(GOOS),darwin) From 47c115bf4c864c21e87e0775fc1d680eb97ba214 Mon Sep 17 00:00:00 2001 From: Piotr Skamruk Date: Wed, 25 Sep 2024 13:19:38 +0000 Subject: [PATCH 10/73] Fix panic on bitcoin querying failure (#6348) Fixes #6347 --- cmd/bootstrapper/generator.go | 27 ++++++----- cmd/bootstrapper/generator_test.go | 74 +++++++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 13 deletions(-) diff --git a/cmd/bootstrapper/generator.go b/cmd/bootstrapper/generator.go index 0c8ac6456f..60701f904b 100644 --- a/cmd/bootstrapper/generator.go +++ b/cmd/bootstrapper/generator.go @@ -14,6 +14,7 @@ import ( "sort" "time" + "github.com/hashicorp/go-retryablehttp" pb "github.com/spacemeshos/api/release/go/spacemesh/v1" "github.com/spf13/afero" "go.uber.org/zap" @@ -37,7 +38,7 @@ func PersistedFilename(epoch types.EpochID, suffix string) string { type Generator struct { logger *zap.Logger fs afero.Fs - client *http.Client + client *retryablehttp.Client btcEndpoint string smEndpoint string } @@ -56,23 +57,24 @@ func WithFilesystem(fs afero.Fs) Opt { } } -func WithHttpClient(c *http.Client) Opt { - return func(g *Generator) { - g.client = c - } -} - func NewGenerator(btcEndpoint, smEndpoint string, opts ...Opt) *Generator { + client := retryablehttp.NewClient() + client.RetryWaitMin = 500 * time.Millisecond + client.RetryWaitMax = time.Second + client.Backoff = retryablehttp.LinearJitterBackoff + g := &Generator{ logger: zap.NewNop(), fs: afero.NewOsFs(), - client: &http.Client{}, + client: client, btcEndpoint: btcEndpoint, smEndpoint: smEndpoint, } + for _, opt := range opts { opt(g) } + return g } @@ -145,7 +147,7 @@ func (g *Generator) genBeacon(ctx context.Context, logger *zap.Logger) (types.Be func bitcoinHash( ctx context.Context, logger *zap.Logger, - client *http.Client, + client *retryablehttp.Client, targetUrl string, ) (*BitcoinResponse, error) { latest, err := queryBitcoin(ctx, client, targetUrl) @@ -164,12 +166,12 @@ func bitcoinHash( return confirmed, nil } -func queryBitcoin(ctx context.Context, client *http.Client, targetUrl string) (*BitcoinResponse, error) { +func queryBitcoin(ctx context.Context, client *retryablehttp.Client, targetUrl string) (*BitcoinResponse, error) { resource, err := url.Parse(targetUrl) if err != nil { return nil, fmt.Errorf("parse btc url: %w", err) } - req, err := http.NewRequestWithContext(ctx, http.MethodGet, resource.String(), nil) + req, err := retryablehttp.NewRequestWithContext(ctx, http.MethodGet, resource.String(), nil) // some apis got over sensitive without UA set req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.0") if err != nil { @@ -179,6 +181,9 @@ func queryBitcoin(ctx context.Context, client *http.Client, targetUrl string) (* if err != nil { return nil, fmt.Errorf("http get latest bitcoin block: %w", err) } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("fetching bitcoin block unsuccessful: %s", resp.Status) + } defer resp.Body.Close() data, err := io.ReadAll(resp.Body) if err != nil { diff --git a/cmd/bootstrapper/generator_test.go b/cmd/bootstrapper/generator_test.go index e201d9186b..b5d01ff74b 100644 --- a/cmd/bootstrapper/generator_test.go +++ b/cmd/bootstrapper/generator_test.go @@ -140,12 +140,12 @@ func TestGenerator_Generate(t *testing.T) { defer ts.Close() fs := afero.NewMemMapFs() + g := NewGenerator( ts.URL, cfg.PublicListener, WithLogger(zaptest.NewLogger(t)), WithFilesystem(fs), - WithHttpClient(ts.Client()), ) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -166,6 +166,77 @@ func TestGenerator_Generate(t *testing.T) { } } +func TestGenerator_Generate_CheckBitcoinAPIResilience(t *testing.T) { + targetEpoch := types.EpochID(3) + db := statesql.InMemory() + createAtxs(t, db, targetEpoch-1, types.RandomActiveSet(activeSetSize)) + cfg, cleanup := launchServer(t, datastore.NewCachedDB(db, zaptest.NewLogger(t))) + t.Cleanup(cleanup) + + for _, tc := range []struct { + desc string + statusCode, attempts int + shouldFail bool + }{ + { + desc: "check 2x 500", + statusCode: http.StatusInternalServerError, + attempts: 2, + shouldFail: false, + }, + { + desc: "check 2x 429", + statusCode: http.StatusTooManyRequests, + attempts: 2, + shouldFail: false, + }, + { + desc: "fail on hardcoded genBeacon timeout", + statusCode: http.StatusInternalServerError, + attempts: 15, + shouldFail: true, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + t.Parallel() + attempt := 0 + mux := http.NewServeMux() + mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { + attempt += 1 + if attempt <= tc.attempts { + w.WriteHeader(tc.statusCode) + return + } + if strings.HasSuffix(r.URL.String(), "/blocks/782685") { + w.Write([]byte(bitcoinResponse2)) + } else { + w.Write([]byte(bitcoinResponse1)) + } + }) + ts := httptest.NewServer(mux) + defer ts.Close() + + fs := afero.NewMemMapFs() + + g := NewGenerator( + ts.URL, + cfg.PublicListener, + WithLogger(zaptest.NewLogger(t)), + WithFilesystem(fs), + ) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + _, err := g.Generate(ctx, targetEpoch, true, false) + + if tc.shouldFail { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + func TestGenerator_CheckAPI(t *testing.T) { t.Parallel() targetEpoch := types.EpochID(3) @@ -181,7 +252,6 @@ func TestGenerator_CheckAPI(t *testing.T) { cfg.PublicListener, WithLogger(lg), WithFilesystem(fs), - WithHttpClient(http.DefaultClient), ) ctx, cancel := context.WithCancel(context.Background()) defer cancel() From 1954fd2d32aab89a4c1b59b9dc0483f493721f89 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:08:39 +0000 Subject: [PATCH 11/73] Cleanup Makefiles (#6352) ## Motivation Follow up for #6351: variables used in the makefile should be defined where they are used if possible. Specifically I moved `EXE` and `ULIMIT` from `Makefile-libs.Inc` to `Makefile`. --- Makefile | 8 ++++++++ Makefile-libs.Inc | 2 -- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4317805262..6c2acbcb1e 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,14 @@ LDFLAGS = -ldflags "$(C_LDFLAGS)" include Makefile-libs.Inc +# Set the correct extension for the executable based on the OS +# and set the correct ulimit command for the OS +ifeq ($(OS),Windows_NT) + EXE := .exe +else + ULIMIT := ulimit -n 4096; +endif + UNIT_TESTS ?= $(shell go list ./... | grep -v systest/tests | grep -v genvm/cmd) export CGO_ENABLED := 1 diff --git a/Makefile-libs.Inc b/Makefile-libs.Inc index aa3c7139a8..b1fd2ecf45 100644 --- a/Makefile-libs.Inc +++ b/Makefile-libs.Inc @@ -27,7 +27,6 @@ ifeq ($(GOOS),windows) platform := windows export PATH := $(PATH):$(BIN_DIR) CGO_LDFLAGS := $(CGO_LDFLAGS) -Wl,-Bstatic -lpthread -Wl,-Bdynamic - EXE := .exe else TEMP := /tmp ifeq ($(GOOS),darwin) @@ -37,7 +36,6 @@ else platform := macos endif CGO_LDFLAGS := $(CGO_LDFLAGS) -Wl,-rpath,@loader_path - ULIMIT := ulimit -n 9999; else ifeq ($(GOARCH),arm64) platform := linux-arm64 From e7add8cfb66508eb631eb131f045d1aac4d949fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:33:07 +0000 Subject: [PATCH 12/73] build(deps): Bump github.com/quic-go/quic-go from 0.46.0 to 0.47.0 (#6321) Co-authored-by: Matthias <5011972+fasmat@users.noreply.github.com> --- go.mod | 22 +++++++++++----------- go.sum | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index 4b42b0f526..3315959261 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22.4 require ( cloud.google.com/go/storage v1.43.0 github.com/ALTree/bigfloat v0.2.0 - github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240913055630-bfe8736306b4 + github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068 github.com/cosmos/btcutil v1.0.5 github.com/go-llsqlite/crawshaw v0.5.5 github.com/gofrs/flock v0.12.1 @@ -20,8 +20,8 @@ require ( github.com/ipfs/go-ds-leveldb v0.5.0 github.com/ipfs/go-log/v2 v2.5.1 github.com/jonboulle/clockwork v0.4.0 - github.com/libp2p/go-libp2p v0.36.2 - github.com/libp2p/go-libp2p-kad-dht v0.25.2 + github.com/libp2p/go-libp2p v0.36.4 + github.com/libp2p/go-libp2p-kad-dht v0.26.1 github.com/libp2p/go-libp2p-pubsub v0.12.0 github.com/libp2p/go-libp2p-record v0.2.0 github.com/libp2p/go-msgio v0.3.0 @@ -34,7 +34,7 @@ require ( github.com/prometheus/client_golang v1.20.4 github.com/prometheus/client_model v0.6.1 github.com/prometheus/common v0.59.1 - github.com/quic-go/quic-go v0.46.0 + github.com/quic-go/quic-go v0.47.0 github.com/rs/cors v1.11.1 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/seehuhn/mt19937 v1.0.0 @@ -58,7 +58,7 @@ require ( golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/sync v0.8.0 golang.org/x/time v0.6.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 + google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 google.golang.org/grpc v1.67.0 google.golang.org/protobuf v1.34.2 k8s.io/api v0.31.1 @@ -73,7 +73,7 @@ require ( cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.5.0 // indirect cloud.google.com/go/iam v1.1.8 // indirect - github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect + github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect github.com/anacrolix/chansync v0.3.0 // indirect github.com/anacrolix/missinggo v1.2.1 // indirect github.com/anacrolix/missinggo/perf v1.0.0 // indirect @@ -122,17 +122,17 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/huandu/xstrings v1.2.0 // indirect github.com/huin/goupnp v1.3.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/boxo v0.10.0 // indirect + github.com/ipfs/boxo v0.21.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect github.com/ipfs/go-log v1.0.5 // indirect - github.com/ipld/go-ipld-prime v0.20.0 // indirect + github.com/ipld/go-ipld-prime v0.21.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect @@ -198,7 +198,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polydawn/refmt v0.89.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/webtransport-go v0.8.0 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect @@ -230,7 +230,7 @@ require ( golang.org/x/text v0.18.0 // indirect golang.org/x/tools v0.25.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - gonum.org/v1/gonum v0.13.0 // indirect + gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/api v0.187.0 // indirect google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect diff --git a/go.sum b/go.sum index a44068cc0b..ab43c79114 100644 --- a/go.sum +++ b/go.sum @@ -25,8 +25,8 @@ github.com/ALTree/bigfloat v0.2.0 h1:AwNzawrpFuw55/YDVlcPw0F0cmmXrmngBHhVrvdXPvM github.com/ALTree/bigfloat v0.2.0/go.mod h1:+NaH2gLeY6RPBPPQf4aRotPPStg+eXc8f9ZaE4vRfD4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= +github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/anacrolix/chansync v0.3.0 h1:lRu9tbeuw3wl+PhMu/r+JJCRu5ArFXIluOgdF0ao6/U= github.com/anacrolix/chansync v0.3.0/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k= github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= @@ -60,8 +60,8 @@ github.com/c0mm4nd/go-ripemd v0.0.0-20200326052756-bd1759ad7d10/go.mod h1:mYPR+a github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240913055630-bfe8736306b4 h1:DArhGvCgteuSs/4MQ2iUMdVYjw2+b9SIdlj8AGHXhUU= -github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240913055630-bfe8736306b4/go.mod h1:x11iCbZV6hzzSQWMq610B6Wl5Lg1dhwqcVfeiWQQnQQ= +github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068 h1:h+CQlN3KrlaQ5XU+k0R9jxyV7rgM4FTpPHXQ6JWhGJM= +github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068/go.mod h1:x11iCbZV6hzzSQWMq610B6Wl5Lg1dhwqcVfeiWQQnQQ= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -260,8 +260,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -276,8 +276,8 @@ github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= -github.com/ipfs/boxo v0.10.0/go.mod h1:Fg+BnfxZ0RPzR0nOodzdIq3A7KgoWAOWsEIImrIQdBM= +github.com/ipfs/boxo v0.21.0 h1:XpGXb+TQQ0IUdYaeAxGzWjSs6ow/Lce148A/2IbRDVE= +github.com/ipfs/boxo v0.21.0/go.mod h1:NmweAYeY1USOaJJxouy7DLr/Y5M8UBSsCI2KRivO+TY= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= @@ -288,15 +288,15 @@ github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46U github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= +github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0= +github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs= github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/ipld/go-ipld-prime v0.20.0 h1:Ud3VwE9ClxpO2LkCYP7vWPc0Fo+dYdYzgxUJZ3uRG4g= -github.com/ipld/go-ipld-prime v0.20.0/go.mod h1:PzqZ/ZR981eKbgdr3y2DJYeD/8bgMawdGVlJDE8kK+M= +github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E= +github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -347,12 +347,12 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.36.2 h1:BbqRkDaGC3/5xfaJakLV/BrpjlAuYqSB0lRvtzL3B/U= -github.com/libp2p/go-libp2p v0.36.2/go.mod h1:XO3joasRE4Eup8yCTTP/+kX+g92mOgRaadk46LmPhHY= +github.com/libp2p/go-libp2p v0.36.4 h1:ZaKyKSHBFbzs6CnAYMhaMc5QgV1UoCN+9WXrg8SEwI4= +github.com/libp2p/go-libp2p v0.36.4/go.mod h1:4Y5vFyCUiJuluEPmpnKYf6WFx5ViKPUYs/ixe9ANFZ8= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-kad-dht v0.25.2 h1:FOIk9gHoe4YRWXTu8SY9Z1d0RILol0TrtApsMDPjAVQ= -github.com/libp2p/go-libp2p-kad-dht v0.25.2/go.mod h1:6za56ncRHYXX4Nc2vn8z7CZK0P4QiMcrn77acKLM2Oo= +github.com/libp2p/go-libp2p-kad-dht v0.26.1 h1:AazV3LCImYVkDUGAHx5lIEgZ9iUI2QQKH5GMRQU8uEA= +github.com/libp2p/go-libp2p-kad-dht v0.26.1/go.mod h1:mqRUGJ/+7ziQ3XknU2kKHfsbbgb9xL65DXjPOJwmZF8= github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= github.com/libp2p/go-libp2p-kbucket v0.6.3/go.mod h1:RCseT7AH6eJWxxk2ol03xtP9pEHetYSPXOaJnOiD8i0= github.com/libp2p/go-libp2p-pubsub v0.12.0 h1:PENNZjSfk8KYxANRlpipdS7+BfLmOl3L2E/6vSNjbdI= @@ -538,10 +538,10 @@ github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0Urw github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.46.0 h1:uuwLClEEyk1DNvchH8uCByQVjo3yKL9opKulExNDs7Y= -github.com/quic-go/quic-go v0.46.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7Y= +github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= github.com/quic-go/webtransport-go v0.8.0 h1:HxSrwun11U+LlmwpgM1kEqIqH90IT4N8auv/cD7QFJg= github.com/quic-go/webtransport-go v0.8.0/go.mod h1:N99tjprW432Ut5ONql/aUhSLT0YVSlwHohQsuac9WaM= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= @@ -886,8 +886,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM= -gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU= +gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= +gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= @@ -909,8 +909,8 @@ google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d h1:PksQg4dV6Sem3/H google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:s7iA721uChleev562UJO2OYB0PPT9CMFjV+Ce7VJH5M= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 h1:N9BgCIAUvn/M+p4NJccWPWb3BWh88+zyL0ll9HgbEeM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= From 5737fc4862498930a484d18d976ed9679d391214 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Fri, 27 Sep 2024 13:15:31 +0000 Subject: [PATCH 13/73] v2alpha1 malfeasance API (#6353) ## Motivation This implements the malfeasance API for v2alpha1. --- activation/handler_v1.go | 4 +- activation/malfeasance.go | 39 +++ api/grpcserver/activation_service_test.go | 5 +- api/grpcserver/config.go | 5 +- api/grpcserver/globalstate_service_test.go | 4 +- api/grpcserver/interface.go | 3 +- api/grpcserver/mesh_service.go | 5 +- api/grpcserver/mesh_service_test.go | 16 +- api/grpcserver/mocks.go | 11 +- api/grpcserver/v2alpha1/account_test.go | 2 +- api/grpcserver/v2alpha1/activation.go | 47 +-- api/grpcserver/v2alpha1/activation_test.go | 97 +++--- api/grpcserver/v2alpha1/interface.go | 7 + api/grpcserver/v2alpha1/layer.go | 48 +-- api/grpcserver/v2alpha1/layer_test.go | 99 +++--- api/grpcserver/v2alpha1/malfeasance.go | 327 ++++++++++++++++++++ api/grpcserver/v2alpha1/malfeasance_test.go | 212 +++++++++++++ api/grpcserver/v2alpha1/mocks.go | 78 +++++ api/grpcserver/v2alpha1/reward.go | 47 +-- api/grpcserver/v2alpha1/reward_test.go | 96 +++--- api/grpcserver/v2alpha1/transaction_test.go | 12 +- beacon/handlers_test.go | 4 +- common/util/json_test.go | 58 ++-- datastore/store.go | 18 +- datastore/store_test.go | 14 +- events/events.go | 12 +- events/malfeasance.go | 7 +- go.mod | 2 +- go.sum | 4 +- hare3/hare.go | 2 +- hare3/malfeasance.go | 15 + malfeasance/handler.go | 105 ++++--- malfeasance/handler_test.go | 112 ++++++- malfeasance/interface.go | 7 +- malfeasance/mocks.go | 145 ++++----- malfeasance/wire/malfeasance.go | 12 - mesh/malfeasance.go | 13 + node/flags/string_to_uint64_test.go | 6 +- node/node.go | 120 +++---- proposals/handler.go | 2 +- proposals/handler_test.go | 2 +- sql/atxs/atxs.go | 3 +- sql/builder/builder.go | 50 +-- sql/builder/builder_test.go | 37 +-- sql/database_test.go | 2 +- sql/identities/identities.go | 21 ++ sql/identities/identities_test.go | 94 ++++++ syncer/malsync/syncer.go | 2 +- 48 files changed, 1466 insertions(+), 567 deletions(-) create mode 100644 api/grpcserver/v2alpha1/interface.go create mode 100644 api/grpcserver/v2alpha1/malfeasance.go create mode 100644 api/grpcserver/v2alpha1/malfeasance_test.go create mode 100644 api/grpcserver/v2alpha1/mocks.go diff --git a/activation/handler_v1.go b/activation/handler_v1.go index 273edb0a07..647cd7cdb5 100644 --- a/activation/handler_v1.go +++ b/activation/handler_v1.go @@ -240,7 +240,7 @@ func (h *HandlerV1) syntacticallyValidateDeps( if err := identities.SetMalicious(h.cdb, atx.SmesherID, encodedProof, time.Now()); err != nil { return 0, 0, nil, fmt.Errorf("adding malfeasance proof: %w", err) } - h.cdb.CacheMalfeasanceProof(atx.SmesherID, proof) + h.cdb.CacheMalfeasanceProof(atx.SmesherID, encodedProof) h.tortoise.OnMalfeasance(atx.SmesherID) return 0, 0, proof, nil } @@ -495,7 +495,7 @@ func (h *HandlerV1) storeAtx( atxs.AtxAdded(h.cdb, atx) if proof != nil { - h.cdb.CacheMalfeasanceProof(atx.SmesherID, proof) + h.cdb.CacheMalfeasanceProof(atx.SmesherID, codec.MustEncode(proof)) h.tortoise.OnMalfeasance(atx.SmesherID) } diff --git a/activation/malfeasance.go b/activation/malfeasance.go index 17cae36997..2874a96163 100644 --- a/activation/malfeasance.go +++ b/activation/malfeasance.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strconv" "github.com/prometheus/client_golang/prometheus" "github.com/spacemeshos/post/shared" @@ -44,6 +45,19 @@ func NewMalfeasanceHandler( } } +func (mh *MalfeasanceHandler) Info(data wire.ProofData) (map[string]string, error) { + ap, ok := data.(*wire.AtxProof) + if !ok { + return nil, errors.New("wrong message type for multiple ATXs") + } + return map[string]string{ + "atx1": ap.Messages[0].InnerMsg.MsgHash.String(), + "atx2": ap.Messages[1].InnerMsg.MsgHash.String(), + "publish_epoch": strconv.FormatUint(uint64(ap.Messages[0].InnerMsg.PublishEpoch), 10), + "smesher_id": ap.Messages[0].SmesherID.String(), + }, nil +} + func (mh *MalfeasanceHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { ap, ok := data.(*wire.AtxProof) if !ok { @@ -109,6 +123,18 @@ func NewInvalidPostIndexHandler( } } +func (mh *InvalidPostIndexHandler) Info(data wire.ProofData) (map[string]string, error) { + pp, ok := data.(*wire.InvalidPostIndexProof) + if !ok { + return nil, errors.New("wrong message type for invalid post index") + } + return map[string]string{ + "atx": pp.Atx.ID().String(), + "index": strconv.FormatUint(uint64(pp.InvalidIdx), 10), + "smesher_id": pp.Atx.SmesherID.String(), + }, nil +} + func (mh *InvalidPostIndexHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { proof, ok := data.(*wire.InvalidPostIndexProof) if !ok { @@ -174,6 +200,19 @@ func NewInvalidPrevATXHandler( } } +func (mh *InvalidPrevATXHandler) Info(data wire.ProofData) (map[string]string, error) { + pp, ok := data.(*wire.InvalidPrevATXProof) + if !ok { + return nil, errors.New("wrong message type for invalid previous ATX") + } + return map[string]string{ + "atx1": pp.Atx1.ID().String(), + "atx2": pp.Atx2.ID().String(), + "prev_atx": pp.Atx1.PrevATXID.String(), + "smesher_id": pp.Atx1.SmesherID.String(), + }, nil +} + func (mh *InvalidPrevATXHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { proof, ok := data.(*wire.InvalidPrevATXProof) if !ok { diff --git a/api/grpcserver/activation_service_test.go b/api/grpcserver/activation_service_test.go index 756501ac85..f35f48dd69 100644 --- a/api/grpcserver/activation_service_test.go +++ b/api/grpcserver/activation_service_test.go @@ -14,6 +14,7 @@ import ( "google.golang.org/protobuf/types/known/emptypb" "github.com/spacemeshos/go-spacemesh/api/grpcserver" + "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/events" "github.com/spacemeshos/go-spacemesh/sql" @@ -169,7 +170,7 @@ func TestGet_IdentityCanceled(t *testing.T) { } atx.SetID(id) atxProvider.EXPECT().GetAtx(id).Return(&atx, nil) - atxProvider.EXPECT().MalfeasanceProof(smesher).Return(proof, nil) + atxProvider.EXPECT().MalfeasanceProof(smesher).Return(codec.MustEncode(proof), nil) atxProvider.EXPECT().Previous(id).Return([]types.ATXID{previous}, nil) response, err := activationService.Get(context.Background(), &pb.GetRequest{Id: id.Bytes()}) @@ -184,5 +185,5 @@ func TestGet_IdentityCanceled(t *testing.T) { require.Equal(t, previous.Bytes(), response.Atx.PreviousAtxs[0].Id) require.Equal(t, atx.NumUnits, response.Atx.NumUnits) require.Equal(t, atx.Sequence, response.Atx.Sequence) - require.Equal(t, events.ToMalfeasancePB(smesher, proof, false), response.MalfeasanceProof) + require.Equal(t, events.ToMalfeasancePB(smesher, codec.MustEncode(proof), false), response.MalfeasanceProof) } diff --git a/api/grpcserver/config.go b/api/grpcserver/config.go index 564d9184f4..801f07a980 100644 --- a/api/grpcserver/config.go +++ b/api/grpcserver/config.go @@ -49,6 +49,8 @@ const ( TransactionV2Alpha1 Service = "transaction_v2alpha1" TransactionStreamV2Alpha1 Service = "transaction_stream_v2alpha1" AccountV2Alpha1 Service = "account_v2alpha1" + MalfeasanceV2Alpha1 Service = "malfeasance_v2alpha1" + MalfeasanceStreamV2Alpha1 Service = "malfeasance_stream_v2alpha1" ) // DefaultConfig defines the default configuration options for api. @@ -57,12 +59,13 @@ func DefaultConfig() Config { PublicServices: []Service{ GlobalState, Mesh, Transaction, Node, Activation, ActivationV2Alpha1, RewardV2Alpha1, NetworkV2Alpha1, NodeV2Alpha1, LayerV2Alpha1, TransactionV2Alpha1, - AccountV2Alpha1, + AccountV2Alpha1, MalfeasanceV2Alpha1, }, PublicListener: "0.0.0.0:9092", PrivateServices: []Service{ Admin, Smesher, Debug, ActivationStreamV2Alpha1, RewardStreamV2Alpha1, LayerStreamV2Alpha1, TransactionStreamV2Alpha1, + MalfeasanceStreamV2Alpha1, }, PrivateListener: "127.0.0.1:9093", PostServices: []Service{Post, PostInfo}, diff --git a/api/grpcserver/globalstate_service_test.go b/api/grpcserver/globalstate_service_test.go index 8df8fc6425..9469468ad3 100644 --- a/api/grpcserver/globalstate_service_test.go +++ b/api/grpcserver/globalstate_service_test.go @@ -79,7 +79,7 @@ func TestGlobalStateService(t *testing.T) { _, err := c.AccountDataQuery(ctx, &pb.AccountDataQueryRequest{}) require.Error(t, err) - require.Contains(t, err.Error(), "`Filter` must be provided") + require.ErrorContains(t, err, "`Filter` must be provided") }) t.Run("AccountDataQuery_MissingFlags", func(t *testing.T) { t.Parallel() @@ -91,7 +91,7 @@ func TestGlobalStateService(t *testing.T) { }, }) require.Error(t, err) - require.Contains(t, err.Error(), "`Filter.AccountMeshDataFlags` must set at least one") + require.ErrorContains(t, err, "`Filter.AccountMeshDataFlags` must set at least one") }) t.Run("AccountDataQuery_BadOffset", func(t *testing.T) { t.Parallel() diff --git a/api/grpcserver/interface.go b/api/grpcserver/interface.go index d8a4b5f5bb..7b513b9c7e 100644 --- a/api/grpcserver/interface.go +++ b/api/grpcserver/interface.go @@ -9,7 +9,6 @@ import ( "github.com/spacemeshos/go-spacemesh/activation" "github.com/spacemeshos/go-spacemesh/common/types" - "github.com/spacemeshos/go-spacemesh/malfeasance/wire" "github.com/spacemeshos/go-spacemesh/p2p" "github.com/spacemeshos/go-spacemesh/p2p/peerinfo" "github.com/spacemeshos/go-spacemesh/signing" @@ -58,7 +57,7 @@ type atxProvider interface { GetAtx(id types.ATXID) (*types.ActivationTx, error) Previous(id types.ATXID) ([]types.ATXID, error) MaxHeightAtx() (types.ATXID, error) - MalfeasanceProof(id types.NodeID) (*wire.MalfeasanceProof, error) + MalfeasanceProof(id types.NodeID) ([]byte, error) } type postState interface { diff --git a/api/grpcserver/mesh_service.go b/api/grpcserver/mesh_service.go index 7d08ff4037..a256cf1f19 100644 --- a/api/grpcserver/mesh_service.go +++ b/api/grpcserver/mesh_service.go @@ -19,7 +19,6 @@ import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/datastore" "github.com/spacemeshos/go-spacemesh/events" - "github.com/spacemeshos/go-spacemesh/malfeasance/wire" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/atxs" ) @@ -634,13 +633,13 @@ func (s *MeshService) MalfeasanceStream( } // first serve those already existed locally. - if err := s.cdb.IterateMalfeasanceProofs(func(id types.NodeID, mp *wire.MalfeasanceProof) error { + if err := s.cdb.IterateMalfeasanceProofs(func(id types.NodeID, proof []byte) error { select { case <-stream.Context().Done(): return nil default: res := &pb.MalfeasanceStreamResponse{ - Proof: events.ToMalfeasancePB(id, mp, req.IncludeProof), + Proof: events.ToMalfeasancePB(id, proof, req.IncludeProof), } return stream.Send(res) } diff --git a/api/grpcserver/mesh_service_test.go b/api/grpcserver/mesh_service_test.go index 57c1fc0241..022b003e7d 100644 --- a/api/grpcserver/mesh_service_test.go +++ b/api/grpcserver/mesh_service_test.go @@ -96,9 +96,7 @@ func BallotMalfeasance(tb testing.TB, db sql.Executor) (types.NodeID, *wire.Malf Data: &bp, }, } - data, err := codec.Encode(mp) - require.NoError(tb, err) - require.NoError(tb, identities.SetMalicious(db, sig.NodeID(), data, time.Now())) + require.NoError(tb, identities.SetMalicious(db, sig.NodeID(), codec.MustEncode(mp), time.Now())) return sig.NodeID(), mp } @@ -176,7 +174,7 @@ func TestMeshService_MalfeasanceQuery(t *testing.T) { require.Equal(t, nodeID, types.BytesToNodeID(resp.Proof.SmesherId.Id)) require.EqualValues(t, layer, resp.Proof.Layer.Number) require.Equal(t, pb.MalfeasanceProof_MALFEASANCE_BALLOT, resp.Proof.Kind) - require.Equal(t, events.ToMalfeasancePB(nodeID, proof, true), resp.Proof) + require.Equal(t, events.ToMalfeasancePB(nodeID, codec.MustEncode(proof), true), resp.Proof) require.NotEmpty(t, resp.Proof.Proof) var got wire.MalfeasanceProof require.NoError(t, codec.Decode(resp.Proof.Proof, &got)) @@ -247,15 +245,17 @@ func TestMeshService_MalfeasanceStream(t *testing.T) { require.Equal(t, 10, hare) id, proof := AtxMalfeasance(t, db) - events.ReportMalfeasance(id, proof) + proofBytes := codec.MustEncode(proof) + events.ReportMalfeasance(id, proofBytes) resp, err := stream.Recv() require.NoError(t, err) - require.Equal(t, events.ToMalfeasancePB(id, proof, false), resp.Proof) + require.Equal(t, events.ToMalfeasancePB(id, proofBytes, false), resp.Proof) id, proof = BallotMalfeasance(t, db) - events.ReportMalfeasance(id, proof) + proofBytes = codec.MustEncode(proof) + events.ReportMalfeasance(id, proofBytes) resp, err = stream.Recv() require.NoError(t, err) - require.Equal(t, events.ToMalfeasancePB(id, proof, false), resp.Proof) + require.Equal(t, events.ToMalfeasancePB(id, proofBytes, false), resp.Proof) } type MeshAPIMockInstrumented struct { diff --git a/api/grpcserver/mocks.go b/api/grpcserver/mocks.go index a9eab2e4d6..494f04f1a4 100644 --- a/api/grpcserver/mocks.go +++ b/api/grpcserver/mocks.go @@ -18,7 +18,6 @@ import ( multiaddr "github.com/multiformats/go-multiaddr" activation "github.com/spacemeshos/go-spacemesh/activation" types "github.com/spacemeshos/go-spacemesh/common/types" - wire "github.com/spacemeshos/go-spacemesh/malfeasance/wire" p2p "github.com/spacemeshos/go-spacemesh/p2p" peerinfo "github.com/spacemeshos/go-spacemesh/p2p/peerinfo" signing "github.com/spacemeshos/go-spacemesh/signing" @@ -913,10 +912,10 @@ func (c *MockatxProviderGetAtxCall) DoAndReturn(f func(types.ATXID) (*types.Acti } // MalfeasanceProof mocks base method. -func (m *MockatxProvider) MalfeasanceProof(id types.NodeID) (*wire.MalfeasanceProof, error) { +func (m *MockatxProvider) MalfeasanceProof(id types.NodeID) ([]byte, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MalfeasanceProof", id) - ret0, _ := ret[0].(*wire.MalfeasanceProof) + ret0, _ := ret[0].([]byte) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -934,19 +933,19 @@ type MockatxProviderMalfeasanceProofCall struct { } // Return rewrite *gomock.Call.Return -func (c *MockatxProviderMalfeasanceProofCall) Return(arg0 *wire.MalfeasanceProof, arg1 error) *MockatxProviderMalfeasanceProofCall { +func (c *MockatxProviderMalfeasanceProofCall) Return(arg0 []byte, arg1 error) *MockatxProviderMalfeasanceProofCall { c.Call = c.Call.Return(arg0, arg1) return c } // Do rewrite *gomock.Call.Do -func (c *MockatxProviderMalfeasanceProofCall) Do(f func(types.NodeID) (*wire.MalfeasanceProof, error)) *MockatxProviderMalfeasanceProofCall { +func (c *MockatxProviderMalfeasanceProofCall) Do(f func(types.NodeID) ([]byte, error)) *MockatxProviderMalfeasanceProofCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockatxProviderMalfeasanceProofCall) DoAndReturn(f func(types.NodeID) (*wire.MalfeasanceProof, error)) *MockatxProviderMalfeasanceProofCall { +func (c *MockatxProviderMalfeasanceProofCall) DoAndReturn(f func(types.NodeID) ([]byte, error)) *MockatxProviderMalfeasanceProofCall { c.Call = c.Call.DoAndReturn(f) return c } diff --git a/api/grpcserver/v2alpha1/account_test.go b/api/grpcserver/v2alpha1/account_test.go index 3b80a98969..29037ba138 100644 --- a/api/grpcserver/v2alpha1/account_test.go +++ b/api/grpcserver/v2alpha1/account_test.go @@ -27,7 +27,7 @@ type testAccount struct { } func TestAccountService_List(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) ctrl, ctx := gomock.WithContext(context.Background(), t) conState := NewMockaccountConState(ctrl) diff --git a/api/grpcserver/v2alpha1/activation.go b/api/grpcserver/v2alpha1/activation.go index d87e6ed399..9fe94e6bab 100644 --- a/api/grpcserver/v2alpha1/activation.go +++ b/api/grpcserver/v2alpha1/activation.go @@ -67,30 +67,14 @@ func (s *ActivationStreamService) Stream( } } - dbChan := make(chan *types.ActivationTx, 100) - errChan := make(chan error, 1) - ops, err := toAtxOperations(toAtxRequest(request)) if err != nil { return status.Error(codes.InvalidArgument, err.Error()) } - // send db data to chan to avoid buffer overflow - go func() { - defer close(dbChan) - if err := atxs.IterateAtxsOps(s.db, ops, func(atx *types.ActivationTx) bool { - select { - case dbChan <- atx: - return true - case <-ctx.Done(): - // exit if the stream context is canceled - return false - } - }); err != nil { - errChan <- status.Error(codes.Internal, err.Error()) - return - } - }() + ctx, cancel := context.WithCancel(stream.Context()) + defer cancel() + dbChan, errChan := s.fetchFromDB(ctx, ops) var eventsOut <-chan events.ActivationTx var eventsFull <-chan struct{} @@ -145,6 +129,31 @@ func (s *ActivationStreamService) Stream( } } +func (s *ActivationStreamService) fetchFromDB( + ctx context.Context, + ops builder.Operations, +) (<-chan *types.ActivationTx, <-chan error) { + dbChan := make(chan *types.ActivationTx) + errChan := make(chan error, 1) // buffered to avoid blocking, routine should exit immediately after sending an error + + go func() { + defer close(dbChan) + if err := atxs.IterateAtxsOps(s.db, ops, func(atx *types.ActivationTx) bool { + select { + case dbChan <- atx: + return true + case <-ctx.Done(): + // exit if the context is canceled + return false + } + }); err != nil { + errChan <- status.Error(codes.Internal, err.Error()) + } + }() + + return dbChan, errChan +} + func toAtx(atx *types.ActivationTx) *spacemeshv2alpha1.Activation { return &spacemeshv2alpha1.Activation{ Id: atx.ID().Bytes(), diff --git a/api/grpcserver/v2alpha1/activation_test.go b/api/grpcserver/v2alpha1/activation_test.go index 9153abdba4..d26ad87603 100644 --- a/api/grpcserver/v2alpha1/activation_test.go +++ b/api/grpcserver/v2alpha1/activation_test.go @@ -16,31 +16,34 @@ import ( "github.com/spacemeshos/go-spacemesh/common/fixture" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/events" + "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/atxs" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) func TestActivationService_List(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() + setup := func(t *testing.T) (spacemeshv2alpha1.ActivationServiceClient, []types.ActivationTx) { + db := statesql.InMemoryTest(t) - gen := fixture.NewAtxsGenerator() - activations := make([]types.ActivationTx, 100) - for i := range activations { - atx := gen.Next() - require.NoError(t, atxs.Add(db, atx, types.AtxBlob{})) - activations[i] = *atx - } + gen := fixture.NewAtxsGenerator() + activations := make([]types.ActivationTx, 100) + for i := range activations { + atx := gen.Next() + require.NoError(t, atxs.Add(db, atx, types.AtxBlob{})) + activations[i] = *atx + } - svc := NewActivationService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + svc := NewActivationService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewActivationServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewActivationServiceClient(conn), activations + } t.Run("limit set too high", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{Limit: 200}) + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{Limit: 200}) require.Error(t, err) s, ok := status.FromError(err) @@ -50,7 +53,8 @@ func TestActivationService_List(t *testing.T) { }) t.Run("no limit set", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{}) + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{}) require.Error(t, err) s, ok := status.FromError(err) @@ -60,7 +64,8 @@ func TestActivationService_List(t *testing.T) { }) t.Run("limit and offset", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{ + client, _ := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{ Limit: 25, Offset: 50, }) @@ -69,13 +74,15 @@ func TestActivationService_List(t *testing.T) { }) t.Run("all", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{Limit: 100}) + client, activations := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{Limit: 100}) require.NoError(t, err) require.Equal(t, len(activations), len(list.Activations)) }) t.Run("coinbase", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{ + client, activations := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{ Limit: 1, Coinbase: activations[3].Coinbase.String(), }) @@ -84,7 +91,8 @@ func TestActivationService_List(t *testing.T) { }) t.Run("smesherId", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{ + client, activations := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{ Limit: 1, SmesherId: [][]byte{activations[1].SmesherID.Bytes()}, }) @@ -93,7 +101,8 @@ func TestActivationService_List(t *testing.T) { }) t.Run("id", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.ActivationRequest{ + client, activations := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.ActivationRequest{ Limit: 1, Id: [][]byte{activations[3].ID().Bytes()}, }) @@ -103,29 +112,30 @@ func TestActivationService_List(t *testing.T) { } func TestActivationStreamService_Stream(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() - - gen := fixture.NewAtxsGenerator() - activations := make([]types.ActivationTx, 100) - for i := range activations { - atx := gen.Next() - require.NoError(t, atxs.Add(db, atx, types.AtxBlob{})) - activations[i] = *atx - } + setup := func(t *testing.T, db sql.Executor) spacemeshv2alpha1.ActivationStreamServiceClient { + gen := fixture.NewAtxsGenerator() + activations := make([]types.ActivationTx, 100) + for i := range activations { + atx := gen.Next() + require.NoError(t, atxs.Add(db, atx, types.AtxBlob{})) + activations[i] = *atx + } - svc := NewActivationStreamService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + svc := NewActivationStreamService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewActivationStreamServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewActivationStreamServiceClient(conn) + } t.Run("all", func(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) - stream, err := client.Stream(ctx, &spacemeshv2alpha1.ActivationStreamRequest{}) + client := setup(t, statesql.InMemoryTest(t)) + + stream, err := client.Stream(context.Background(), &spacemeshv2alpha1.ActivationStreamRequest{}) require.NoError(t, err) var i int @@ -136,19 +146,22 @@ func TestActivationStreamService_Stream(t *testing.T) { } i++ } - require.Len(t, activations, i) + require.Equal(t, 100, i) }) t.Run("watch", func(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) + db := statesql.InMemoryTest(t) + client := setup(t, db) + const ( start = 100 n = 10 ) - gen = fixture.NewAtxsGenerator().WithEpochs(start, 10) + gen := fixture.NewAtxsGenerator().WithEpochs(start, 10) var streamed []*events.ActivationTx for i := 0; i < n; i++ { atx := gen.Next() @@ -186,7 +199,7 @@ func TestActivationStreamService_Stream(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - stream, err := client.Stream(ctx, tc.request) + stream, err := client.Stream(context.Background(), tc.request) require.NoError(t, err) _, err = stream.Header() require.NoError(t, err) @@ -194,7 +207,7 @@ func TestActivationStreamService_Stream(t *testing.T) { var expect []*types.ActivationTx for _, rst := range streamed { require.NoError(t, events.ReportNewActivation(rst.ActivationTx)) - matcher := atxsMatcher{tc.request, ctx} + matcher := atxsMatcher{tc.request, context.Background()} if matcher.match(rst) { expect = append(expect, rst.ActivationTx) } @@ -211,7 +224,7 @@ func TestActivationStreamService_Stream(t *testing.T) { } func TestActivationService_ActivationsCount(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) ctx := context.Background() genEpoch3 := fixture.NewAtxsGenerator().WithEpochs(3, 1) diff --git a/api/grpcserver/v2alpha1/interface.go b/api/grpcserver/v2alpha1/interface.go new file mode 100644 index 0000000000..d0a03b528c --- /dev/null +++ b/api/grpcserver/v2alpha1/interface.go @@ -0,0 +1,7 @@ +package v2alpha1 + +//go:generate mockgen -typed -package=v2alpha1 -destination=./mocks.go -source=./interface.go + +type malfeasanceInfo interface { + Info(data []byte) (map[string]string, error) +} diff --git a/api/grpcserver/v2alpha1/layer.go b/api/grpcserver/v2alpha1/layer.go index 901bb46a28..590cca84ff 100644 --- a/api/grpcserver/v2alpha1/layer.go +++ b/api/grpcserver/v2alpha1/layer.go @@ -60,29 +60,14 @@ func (s *LayerStreamService) Stream( } } - dbChan := make(chan *spacemeshv2alpha1.Layer, 100) - errChan := make(chan error, 1) - ops, err := toLayerOperations(toLayerRequest(request)) if err != nil { return status.Error(codes.InvalidArgument, err.Error()) } - // send db data to chan to avoid buffer overflow - go func() { - defer close(dbChan) - if err := layers.IterateLayersWithBlockOps(s.db, ops, func(layer *layers.Layer) bool { - select { - case dbChan <- toLayer(layer): - return true - case <-ctx.Done(): - // exit if the stream context is canceled - return false - } - }); err != nil { - errChan <- status.Error(codes.Internal, err.Error()) - return - } - }() + + ctx, cancel := context.WithCancel(stream.Context()) + defer cancel() + dbChan, errChan := s.fetchFromDB(ctx, ops) var eventsOut <-chan events.LayerUpdate var eventsFull <-chan struct{} @@ -155,6 +140,31 @@ func (s *LayerStreamService) Stream( } } +func (s *LayerStreamService) fetchFromDB( + ctx context.Context, + ops builder.Operations, +) (<-chan *spacemeshv2alpha1.Layer, <-chan error) { + dbChan := make(chan *spacemeshv2alpha1.Layer, 100) + errChan := make(chan error, 1) // buffered to avoid blocking, routine should exit immediately after sending an error + + go func() { + defer close(dbChan) + if err := layers.IterateLayersWithBlockOps(s.db, ops, func(layer *layers.Layer) bool { + select { + case dbChan <- toLayer(layer): + return true + case <-ctx.Done(): + // exit if the stream context is canceled + return false + } + }); err != nil { + errChan <- status.Error(codes.Internal, err.Error()) + } + }() + + return dbChan, errChan +} + func toLayerRequest(filter *spacemeshv2alpha1.LayerStreamRequest) *spacemeshv2alpha1.LayerRequest { req := &spacemeshv2alpha1.LayerRequest{ StartLayer: filter.StartLayer, diff --git a/api/grpcserver/v2alpha1/layer_test.go b/api/grpcserver/v2alpha1/layer_test.go index 8c76cbeb55..9186c0efc1 100644 --- a/api/grpcserver/v2alpha1/layer_test.go +++ b/api/grpcserver/v2alpha1/layer_test.go @@ -23,29 +23,31 @@ import ( ) func TestLayerService_List(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() - - lrs := make([]layers.Layer, 100) - r1 := rand.New(rand.NewSource(time.Now().UnixNano())) - r2 := rand.New(rand.NewSource(time.Now().UnixNano() + 1)) - for i := range lrs { - processed := r1.Intn(2) == 0 - withBlock := r2.Intn(2) == 0 - l, err := generateLayer(db, types.LayerID(i), layerGenProcessed(processed), layerGenWithBlock(withBlock)) - require.NoError(t, err) - lrs[i] = *l - } + setup := func(t *testing.T) spacemeshv2alpha1.LayerServiceClient { + db := statesql.InMemoryTest(t) + + lrs := make([]layers.Layer, 90) + r1 := rand.New(rand.NewSource(time.Now().UnixNano())) + r2 := rand.New(rand.NewSource(time.Now().UnixNano() + 1)) + for i := range lrs { + processed := r1.Intn(2) == 0 + withBlock := r2.Intn(2) == 0 + l, err := generateLayer(db, types.LayerID(i), layerGenProcessed(processed), layerGenWithBlock(withBlock)) + require.NoError(t, err) + lrs[i] = *l + } - svc := NewLayerService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + svc := NewLayerService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewLayerServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewLayerServiceClient(conn) + } t.Run("limit set too high", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.LayerRequest{Limit: 200}) + client := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.LayerRequest{Limit: 200}) require.Error(t, err) s, ok := status.FromError(err) @@ -55,7 +57,8 @@ func TestLayerService_List(t *testing.T) { }) t.Run("no limit set", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.LayerRequest{}) + client := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.LayerRequest{}) require.Error(t, err) s, ok := status.FromError(err) @@ -65,7 +68,8 @@ func TestLayerService_List(t *testing.T) { }) t.Run("limit and offset", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.LayerRequest{ + client := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.LayerRequest{ Limit: 25, Offset: 50, }) @@ -74,13 +78,14 @@ func TestLayerService_List(t *testing.T) { }) t.Run("all", func(t *testing.T) { - ls, err := client.List(ctx, &spacemeshv2alpha1.LayerRequest{ + client := setup(t) + ls, err := client.List(context.Background(), &spacemeshv2alpha1.LayerRequest{ StartLayer: 0, EndLayer: 100, Limit: 100, }) require.NoError(t, err) - require.Len(t, lrs, len(ls.Layers)) + require.Len(t, ls.Layers, 90) }) } @@ -99,32 +104,33 @@ func TestLayerConvertEventStatus(t *testing.T) { } func TestLayerStreamService_Stream(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() - - lrs := make([]layers.Layer, 100) - r1 := rand.New(rand.NewSource(time.Now().UnixNano())) - r2 := rand.New(rand.NewSource(time.Now().UnixNano() + 1)) - for i := range lrs { - processed := r1.Intn(2) == 0 - withBlock := r2.Intn(2) == 0 - l, err := generateLayer(db, types.LayerID(i), layerGenProcessed(processed), layerGenWithBlock(withBlock)) - require.NoError(t, err) - lrs[i] = *l - } + setup := func(t *testing.T, db sql.StateDatabase) (spacemeshv2alpha1.LayerStreamServiceClient, []layers.Layer) { + lrs := make([]layers.Layer, 100) + r1 := rand.New(rand.NewSource(time.Now().UnixNano())) + r2 := rand.New(rand.NewSource(time.Now().UnixNano() + 1)) + for i := range lrs { + processed := r1.Intn(2) == 0 + withBlock := r2.Intn(2) == 0 + l, err := generateLayer(db, types.LayerID(i), layerGenProcessed(processed), layerGenWithBlock(withBlock)) + require.NoError(t, err) + lrs[i] = *l + } - svc := NewLayerStreamService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + svc := NewLayerStreamService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewLayerStreamServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewLayerStreamServiceClient(conn), lrs + } t.Run("all", func(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) - stream, err := client.Stream(ctx, &spacemeshv2alpha1.LayerStreamRequest{}) + client, lrs := setup(t, statesql.InMemoryTest(t)) + + stream, err := client.Stream(context.Background(), &spacemeshv2alpha1.LayerStreamRequest{}) require.NoError(t, err) var i int @@ -133,7 +139,7 @@ func TestLayerStreamService_Stream(t *testing.T) { if errors.Is(err, io.EOF) { break } - assert.Equal(t, toLayer(&lrs[i]).String(), l.String()) + require.Equal(t, toLayer(&lrs[i]).String(), l.String()) i++ } require.Len(t, lrs, i) @@ -143,6 +149,9 @@ func TestLayerStreamService_Stream(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) + db := statesql.InMemoryTest(t) + client, _ := setup(t, db) + const ( start = 100 n = 10 @@ -169,7 +178,7 @@ func TestLayerStreamService_Stream(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - stream, err := client.Stream(ctx, tc.request) + stream, err := client.Stream(context.Background(), tc.request) require.NoError(t, err) _, err = stream.Header() require.NoError(t, err) @@ -191,7 +200,7 @@ func TestLayerStreamService_Stream(t *testing.T) { } require.NoError(t, events.ReportLayerUpdate(lu)) - matcher := layersMatcher{tc.request, ctx} + matcher := layersMatcher{tc.request, context.Background()} if matcher.match(&lu) { expect = append(expect, &rst) } diff --git a/api/grpcserver/v2alpha1/malfeasance.go b/api/grpcserver/v2alpha1/malfeasance.go new file mode 100644 index 0000000000..bd0b2d7417 --- /dev/null +++ b/api/grpcserver/v2alpha1/malfeasance.go @@ -0,0 +1,327 @@ +package v2alpha1 + +import ( + "bytes" + "context" + "errors" + "io" + "slices" + "strconv" + "time" + + "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + spacemeshv2alpha1 "github.com/spacemeshos/api/release/go/spacemesh/v2alpha1" + "go.uber.org/zap" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/events" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" + "github.com/spacemeshos/go-spacemesh/sql/identities" +) + +const ( + Malfeasance = "malfeasance_v2alpha1" + MalfeasanceStream = "malfeasance_stream_v2alpha1" +) + +func NewMalfeasanceService(db sql.Executor, malfeasanceHandler malfeasanceInfo) *MalfeasanceService { + return &MalfeasanceService{ + db: db, + info: malfeasanceHandler, + } +} + +type MalfeasanceService struct { + db sql.Executor + info malfeasanceInfo +} + +func (s *MalfeasanceService) RegisterService(server *grpc.Server) { + spacemeshv2alpha1.RegisterMalfeasanceServiceServer(server, s) +} + +func (s *MalfeasanceService) RegisterHandlerService(mux *runtime.ServeMux) error { + return spacemeshv2alpha1.RegisterMalfeasanceServiceHandlerServer(context.Background(), mux, s) +} + +func (s *MalfeasanceService) String() string { + return "MalfeasanceService" +} + +func (s *MalfeasanceService) List( + ctx context.Context, + request *spacemeshv2alpha1.MalfeasanceRequest, +) (*spacemeshv2alpha1.MalfeasanceList, error) { + switch { + case request.Limit > 100: + return nil, status.Error(codes.InvalidArgument, "limit is capped at 100") + case request.Limit == 0: + return nil, status.Error(codes.InvalidArgument, "limit must be set to <= 100") + } + + ops, err := toMalfeasanceOps(request) + if err != nil { + return nil, status.Error(codes.InvalidArgument, err.Error()) + } + + proofs := make([]*spacemeshv2alpha1.MalfeasanceProof, 0, request.Limit) + if err := identities.IterateMaliciousOps(s.db, ops, func(id types.NodeID, proof []byte, received time.Time) bool { + rst := toProof(ctx, s.info, id, proof) + if rst == nil { + return true + } + proofs = append(proofs, rst) + return true + }); err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &spacemeshv2alpha1.MalfeasanceList{Proofs: proofs}, nil +} + +func NewMalfeasanceStreamService(db sql.Executor, malfeasanceHandler malfeasanceInfo) *MalfeasanceStreamService { + return &MalfeasanceStreamService{ + db: db, + info: malfeasanceHandler, + } +} + +type MalfeasanceStreamService struct { + db sql.Executor + info malfeasanceInfo +} + +func (s *MalfeasanceStreamService) RegisterService(server *grpc.Server) { + spacemeshv2alpha1.RegisterMalfeasanceStreamServiceServer(server, s) +} + +func (s *MalfeasanceStreamService) RegisterHandlerService(mux *runtime.ServeMux) error { + return spacemeshv2alpha1.RegisterMalfeasanceStreamServiceHandlerServer(context.Background(), mux, s) +} + +func (s *MalfeasanceStreamService) String() string { + return "MalfeasanceStreamService" +} + +func (s *MalfeasanceStreamService) Stream( + request *spacemeshv2alpha1.MalfeasanceStreamRequest, + stream spacemeshv2alpha1.MalfeasanceStreamService_StreamServer, +) error { + var sub *events.BufferedSubscription[events.EventMalfeasance] + if request.Watch { + matcher := malfeasanceMatcher{request} + var err error + sub, err = events.SubscribeMatched(matcher.match) + if err != nil { + return status.Error(codes.Internal, err.Error()) + } + defer sub.Close() + if err := stream.SendHeader(metadata.MD{}); err != nil { + return status.Errorf(codes.Unavailable, "can't send header") + } + } + + ops, err := toMalfeasanceOps(&spacemeshv2alpha1.MalfeasanceRequest{ + SmesherId: request.SmesherId, + }) + if err != nil { + return status.Error(codes.InvalidArgument, err.Error()) + } + + ctx, cancel := context.WithCancel(stream.Context()) + defer cancel() + dbChan, errChan := s.fetchFromDB(ctx, ops) + + var eventsOut <-chan events.EventMalfeasance + var eventsFull <-chan struct{} + if sub != nil { + eventsOut = sub.Out() + eventsFull = sub.Full() + } + + for { + select { + // process events first + case rst := <-eventsOut: + proof := toProof(stream.Context(), s.info, rst.Smesher, rst.Proof) + if proof == nil { + continue + } + err = stream.Send(proof) + switch { + case errors.Is(err, io.EOF): + return nil + case err != nil: + return status.Error(codes.Internal, err.Error()) + } + default: + select { + case rst := <-eventsOut: + proof := toProof(stream.Context(), s.info, rst.Smesher, rst.Proof) + if proof == nil { + continue + } + err = stream.Send(proof) + switch { + case errors.Is(err, io.EOF): + return nil + case err != nil: + return status.Error(codes.Internal, err.Error()) + } + case <-eventsFull: + return status.Error(codes.Canceled, "buffer overflow") + case rst, ok := <-dbChan: + if !ok { + dbChan = nil + if sub == nil { + return nil + } + continue + } + err = stream.Send(rst) + switch { + case errors.Is(err, io.EOF): + return nil + case err != nil: + return status.Error(codes.Internal, err.Error()) + } + case err := <-errChan: + return err + case <-stream.Context().Done(): + return nil + } + } + } +} + +func (s *MalfeasanceStreamService) fetchFromDB( + ctx context.Context, + ops builder.Operations, +) (<-chan *spacemeshv2alpha1.MalfeasanceProof, <-chan error) { + dbChan := make(chan *spacemeshv2alpha1.MalfeasanceProof) + errChan := make(chan error, 1) // buffered to avoid blocking, routine should exit immediately after sending an error + + go func() { + defer close(dbChan) + if err := identities.IterateMaliciousOps(s.db, ops, + func(id types.NodeID, proof []byte, received time.Time) bool { + rst := toProof(ctx, s.info, id, proof) + if rst == nil { + return true + } + + select { + case dbChan <- rst: + return true + case <-ctx.Done(): + // exit if the context is canceled + return false + } + }, + ); err != nil { + errChan <- status.Error(codes.Internal, err.Error()) + } + }() + return dbChan, errChan +} + +func toProof( + ctx context.Context, + info malfeasanceInfo, + id types.NodeID, + proof []byte, +) *spacemeshv2alpha1.MalfeasanceProof { + properties, err := info.Info(proof) + if err != nil { + ctxzap.Debug(ctx, "failed to get malfeasance info", + zap.String("smesher", id.String()), + zap.Error(err), + ) + return nil + } + domain, err := strconv.ParseUint(properties["domain"], 10, 64) + if err != nil { + ctxzap.Debug(ctx, "failed to parse proof domain", + zap.String("smesher", id.String()), + zap.String("domain", properties["domain"]), + zap.Error(err), + ) + return nil + } + delete(properties, "domain") + proofType, err := strconv.ParseUint(properties["type"], 10, 32) + if err != nil { + ctxzap.Debug(ctx, "failed to parse proof type", + zap.String("smesher", id.String()), + zap.String("type", properties["type"]), + zap.Error(err), + ) + return nil + } + delete(properties, "type") + return &spacemeshv2alpha1.MalfeasanceProof{ + Smesher: id.Bytes(), + Domain: spacemeshv2alpha1.MalfeasanceProof_MalfeasanceDomain(domain), + Type: uint32(proofType), + Properties: properties, + } +} + +func toMalfeasanceOps(filter *spacemeshv2alpha1.MalfeasanceRequest) (builder.Operations, error) { + ops := builder.Operations{} + ops.Filter = append(ops.Filter, builder.Op{ + Field: builder.Proof, + Token: builder.IsNotNull, + }) + ops.Modifiers = append(ops.Modifiers, builder.Modifier{ + Key: builder.OrderBy, + Value: builder.Smesher, + }) + + if filter == nil { + return ops, nil + } + + if len(filter.SmesherId) > 0 { + ops.Filter = append(ops.Filter, builder.Op{ + Field: builder.Smesher, + Token: builder.In, + Value: filter.SmesherId, + }) + } + + if filter.Limit != 0 { + ops.Modifiers = append(ops.Modifiers, builder.Modifier{ + Key: builder.Limit, + Value: int64(filter.Limit), + }) + } + if filter.Offset != 0 { + ops.Modifiers = append(ops.Modifiers, builder.Modifier{ + Key: builder.Offset, + Value: int64(filter.Offset), + }) + } + + return ops, nil +} + +type malfeasanceMatcher struct { + *spacemeshv2alpha1.MalfeasanceStreamRequest +} + +func (m *malfeasanceMatcher) match(event *events.EventMalfeasance) bool { + if len(m.SmesherId) > 0 { + idx := slices.IndexFunc(m.SmesherId, func(id []byte) bool { return bytes.Equal(id, event.Smesher.Bytes()) }) + if idx == -1 { + return false + } + } + return true +} diff --git a/api/grpcserver/v2alpha1/malfeasance_test.go b/api/grpcserver/v2alpha1/malfeasance_test.go new file mode 100644 index 0000000000..22744ad648 --- /dev/null +++ b/api/grpcserver/v2alpha1/malfeasance_test.go @@ -0,0 +1,212 @@ +package v2alpha1 + +import ( + "context" + "errors" + "fmt" + "io" + "strconv" + "testing" + "time" + + spacemeshv2alpha1 "github.com/spacemeshos/api/release/go/spacemesh/v2alpha1" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/events" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/statesql" +) + +type malInfo struct { + ID types.NodeID + Proof []byte + + Properties map[string]string +} + +func TestMalfeasanceService_List(t *testing.T) { + setup := func(t *testing.T) (spacemeshv2alpha1.MalfeasanceServiceClient, []malInfo) { + db := statesql.InMemoryTest(t) + ctrl := gomock.NewController(t) + info := NewMockmalfeasanceInfo(ctrl) + + proofs := make([]malInfo, 90) + for i := range proofs { + proofs[i] = malInfo{ID: types.RandomNodeID(), Proof: types.RandomBytes(100)} + proofs[i].Properties = map[string]string{ + "domain": "0", + "type": strconv.FormatUint(uint64(i%4+1), 10), + fmt.Sprintf("key%d", i): fmt.Sprintf("value%d", i), + } + info.EXPECT().Info(proofs[i].Proof).Return(proofs[i].Properties, nil).AnyTimes() + + require.NoError(t, identities.SetMalicious(db, proofs[i].ID, proofs[i].Proof, time.Now())) + } + + svc := NewMalfeasanceService(db, info) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) + + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewMalfeasanceServiceClient(conn), proofs + } + + t.Run("limit set too high", func(t *testing.T) { + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.MalfeasanceRequest{Limit: 200}) + require.Error(t, err) + + s, ok := status.FromError(err) + require.True(t, ok) + assert.Equal(t, codes.InvalidArgument, s.Code()) + require.Equal(t, "limit is capped at 100", s.Message()) + }) + + t.Run("no limit set", func(t *testing.T) { + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.MalfeasanceRequest{}) + require.Error(t, err) + + s, ok := status.FromError(err) + require.True(t, ok) + assert.Equal(t, codes.InvalidArgument, s.Code()) + require.Equal(t, "limit must be set to <= 100", s.Message()) + }) + + t.Run("limit and offset", func(t *testing.T) { + client, _ := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.MalfeasanceRequest{ + Limit: 25, + Offset: 50, + }) + require.NoError(t, err) + require.Len(t, list.Proofs, 25) + }) + + t.Run("all", func(t *testing.T) { + client, _ := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.MalfeasanceRequest{Limit: 100}) + require.NoError(t, err) + require.Len(t, list.Proofs, 90) + }) + + t.Run("smesherId", func(t *testing.T) { + client, proofs := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.MalfeasanceRequest{ + Limit: 1, + SmesherId: [][]byte{proofs[1].ID.Bytes()}, + }) + require.NoError(t, err) + require.Equal(t, proofs[1].ID.Bytes(), list.GetProofs()[0].GetSmesher()) + }) +} + +func TestMalfeasanceStreamService_Stream(t *testing.T) { + setup := func( + t *testing.T, + db sql.Executor, + info *MockmalfeasanceInfo, + ) spacemeshv2alpha1.MalfeasanceStreamServiceClient { + proofs := make([]malInfo, 90) + for i := range proofs { + proofs[i] = malInfo{ID: types.RandomNodeID(), Proof: types.RandomBytes(100)} + proofs[i].Properties = map[string]string{ + "domain": "0", + "type": strconv.FormatUint(uint64(i%4+1), 10), + fmt.Sprintf("key%d", i): fmt.Sprintf("value%d", i), + } + info.EXPECT().Info(proofs[i].Proof).Return(proofs[i].Properties, nil).AnyTimes() + + require.NoError(t, identities.SetMalicious(db, proofs[i].ID, proofs[i].Proof, time.Now())) + } + + svc := NewMalfeasanceStreamService(db, info) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) + + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewMalfeasanceStreamServiceClient(conn) + } + + t.Run("all", func(t *testing.T) { + events.InitializeReporter() + t.Cleanup(events.CloseEventReporter) + + ctrl := gomock.NewController(t) + info := NewMockmalfeasanceInfo(ctrl) + client := setup(t, statesql.InMemoryTest(t), info) + + stream, err := client.Stream(context.Background(), &spacemeshv2alpha1.MalfeasanceStreamRequest{}) + require.NoError(t, err) + + var i int + for { + _, err := stream.Recv() + if errors.Is(err, io.EOF) { + break + } + i++ + } + require.Equal(t, 90, i) + }) + + t.Run("watch", func(t *testing.T) { + events.InitializeReporter() + t.Cleanup(events.CloseEventReporter) + + db := statesql.InMemoryTest(t) + ctrl := gomock.NewController(t) + info := NewMockmalfeasanceInfo(ctrl) + client := setup(t, db, info) + + const ( + start = 100 + n = 10 + ) + + var streamed []*events.EventMalfeasance + for i := 0; i < n; i++ { + smesher := types.RandomNodeID() + streamed = append(streamed, &events.EventMalfeasance{ + Smesher: smesher, + Proof: types.RandomBytes(100), + }) + properties := map[string]string{ + "domain": "0", + "type": strconv.FormatUint(uint64(i%4+1), 10), + fmt.Sprintf("key%d", i): fmt.Sprintf("value%d", i), + } + info.EXPECT().Info(streamed[i].Proof).Return(properties, nil).AnyTimes() + } + + request := &spacemeshv2alpha1.MalfeasanceStreamRequest{ + SmesherId: [][]byte{streamed[3].Smesher.Bytes()}, + Watch: true, + } + stream, err := client.Stream(context.Background(), request) + require.NoError(t, err) + _, err = stream.Header() + require.NoError(t, err) + + var expect []types.NodeID + for _, rst := range streamed { + events.ReportMalfeasance(rst.Smesher, rst.Proof) + matcher := malfeasanceMatcher{request} + if matcher.match(rst) { + expect = append(expect, rst.Smesher) + } + } + + for _, rst := range expect { + received, err := stream.Recv() + require.NoError(t, err) + require.Equal(t, rst.Bytes(), received.Smesher) + } + }) +} diff --git a/api/grpcserver/v2alpha1/mocks.go b/api/grpcserver/v2alpha1/mocks.go new file mode 100644 index 0000000000..d57a76b28e --- /dev/null +++ b/api/grpcserver/v2alpha1/mocks.go @@ -0,0 +1,78 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./interface.go +// +// Generated by this command: +// +// mockgen -typed -package=v2alpha1 -destination=./mocks.go -source=./interface.go +// + +// Package v2alpha1 is a generated GoMock package. +package v2alpha1 + +import ( + reflect "reflect" + + gomock "go.uber.org/mock/gomock" +) + +// MockmalfeasanceInfo is a mock of malfeasanceInfo interface. +type MockmalfeasanceInfo struct { + ctrl *gomock.Controller + recorder *MockmalfeasanceInfoMockRecorder +} + +// MockmalfeasanceInfoMockRecorder is the mock recorder for MockmalfeasanceInfo. +type MockmalfeasanceInfoMockRecorder struct { + mock *MockmalfeasanceInfo +} + +// NewMockmalfeasanceInfo creates a new mock instance. +func NewMockmalfeasanceInfo(ctrl *gomock.Controller) *MockmalfeasanceInfo { + mock := &MockmalfeasanceInfo{ctrl: ctrl} + mock.recorder = &MockmalfeasanceInfoMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockmalfeasanceInfo) EXPECT() *MockmalfeasanceInfoMockRecorder { + return m.recorder +} + +// Info mocks base method. +func (m *MockmalfeasanceInfo) Info(data []byte) (map[string]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Info", data) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Info indicates an expected call of Info. +func (mr *MockmalfeasanceInfoMockRecorder) Info(data any) *MockmalfeasanceInfoInfoCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Info", reflect.TypeOf((*MockmalfeasanceInfo)(nil).Info), data) + return &MockmalfeasanceInfoInfoCall{Call: call} +} + +// MockmalfeasanceInfoInfoCall wrap *gomock.Call +type MockmalfeasanceInfoInfoCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockmalfeasanceInfoInfoCall) Return(arg0 map[string]string, arg1 error) *MockmalfeasanceInfoInfoCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockmalfeasanceInfoInfoCall) Do(f func([]byte) (map[string]string, error)) *MockmalfeasanceInfoInfoCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockmalfeasanceInfoInfoCall) DoAndReturn(f func([]byte) (map[string]string, error)) *MockmalfeasanceInfoInfoCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/api/grpcserver/v2alpha1/reward.go b/api/grpcserver/v2alpha1/reward.go index ea54c66cb7..56e90d6753 100644 --- a/api/grpcserver/v2alpha1/reward.go +++ b/api/grpcserver/v2alpha1/reward.go @@ -61,30 +61,14 @@ func (s *RewardStreamService) Stream( } } - dbChan := make(chan *types.Reward, 100) - errChan := make(chan error, 1) - ops, err := toRewardOperations(toRewardRequest(request)) if err != nil { return status.Error(codes.InvalidArgument, err.Error()) } - // send db data to chan to avoid buffer overflow - go func() { - defer close(dbChan) - if err := rewards.IterateRewardsOps(s.db, ops, func(rwd *types.Reward) bool { - select { - case dbChan <- rwd: - return true - case <-ctx.Done(): - // exit if the stream context is canceled - return false - } - }); err != nil { - errChan <- status.Error(codes.Internal, err.Error()) - return - } - }() + ctx, cancel := context.WithCancel(stream.Context()) + defer cancel() + dbChan, errChan := s.fetchFromDB(ctx, ops) var eventsOut <-chan types.Reward var eventsFull <-chan struct{} @@ -139,6 +123,31 @@ func (s *RewardStreamService) Stream( } } +func (s *RewardStreamService) fetchFromDB( + ctx context.Context, + ops builder.Operations, +) (<-chan *types.Reward, <-chan error) { + dbChan := make(chan *types.Reward) + errChan := make(chan error, 1) // buffered to avoid blocking, routine should exit immediately after sending an error + + go func() { + defer close(dbChan) + if err := rewards.IterateRewardsOps(s.db, ops, func(rwd *types.Reward) bool { + select { + case dbChan <- rwd: + return true + case <-ctx.Done(): + // exit if the context is canceled + return false + } + }); err != nil { + errChan <- status.Error(codes.Internal, err.Error()) + } + }() + + return dbChan, errChan +} + func (s *RewardStreamService) String() string { return "RewardStreamService" } diff --git a/api/grpcserver/v2alpha1/reward_test.go b/api/grpcserver/v2alpha1/reward_test.go index 8f9368fc00..752c9984b5 100644 --- a/api/grpcserver/v2alpha1/reward_test.go +++ b/api/grpcserver/v2alpha1/reward_test.go @@ -20,26 +20,28 @@ import ( ) func TestRewardService_List(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() - - gen := fixture.NewRewardsGenerator().WithAddresses(100).WithUniqueCoinbase() - rwds := make([]types.Reward, 100) - for i := range rwds { - rwd := gen.Next() - require.NoError(t, rewards.Add(db, rwd)) - rwds[i] = *rwd - } + setup := func(t *testing.T) (spacemeshv2alpha1.RewardServiceClient, []types.Reward) { + db := statesql.InMemoryTest(t) + + gen := fixture.NewRewardsGenerator().WithAddresses(90).WithUniqueCoinbase() + rwds := make([]types.Reward, 90) + for i := range rwds { + rwd := gen.Next() + require.NoError(t, rewards.Add(db, rwd)) + rwds[i] = *rwd + } - svc := NewRewardService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + svc := NewRewardService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewRewardServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewRewardServiceClient(conn), rwds + } t.Run("limit set too high", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{Limit: 200}) + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{Limit: 200}) require.Error(t, err) s, ok := status.FromError(err) @@ -49,7 +51,8 @@ func TestRewardService_List(t *testing.T) { }) t.Run("no limit set", func(t *testing.T) { - _, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{}) + client, _ := setup(t) + _, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{}) require.Error(t, err) s, ok := status.FromError(err) @@ -59,7 +62,8 @@ func TestRewardService_List(t *testing.T) { }) t.Run("limit and offset", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{ + client, _ := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{ Limit: 25, Offset: 50, }) @@ -68,13 +72,15 @@ func TestRewardService_List(t *testing.T) { }) t.Run("all", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{Limit: 100}) + client, rwds := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{Limit: 100}) require.NoError(t, err) - require.Len(t, rwds, len(list.Rewards)) + require.Len(t, list.Rewards, len(rwds)) }) t.Run("coinbase", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{ + client, rwds := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{ Limit: 1, StartLayer: rwds[3].Layer.Uint32(), EndLayer: rwds[3].Layer.Uint32(), @@ -88,7 +94,8 @@ func TestRewardService_List(t *testing.T) { }) t.Run("smesher", func(t *testing.T) { - list, err := client.List(ctx, &spacemeshv2alpha1.RewardRequest{ + client, rwds := setup(t) + list, err := client.List(context.Background(), &spacemeshv2alpha1.RewardRequest{ Limit: 1, StartLayer: rwds[4].Layer.Uint32(), EndLayer: rwds[4].Layer.Uint32(), @@ -103,29 +110,32 @@ func TestRewardService_List(t *testing.T) { } func TestRewardStreamService_Stream(t *testing.T) { - db := statesql.InMemory() - ctx := context.Background() - - gen := fixture.NewRewardsGenerator() - rwds := make([]types.Reward, 100) - for i := range rwds { - rwd := gen.Next() - require.NoError(t, rewards.Add(db, rwd)) - rwds[i] = *rwd - } + setup := func(t *testing.T) spacemeshv2alpha1.RewardStreamServiceClient { + db := statesql.InMemoryTest(t) - svc := NewRewardStreamService(db) - cfg, cleanup := launchServer(t, svc) - t.Cleanup(cleanup) + gen := fixture.NewRewardsGenerator() + rwds := make([]types.Reward, 100) + for i := range rwds { + rwd := gen.Next() + require.NoError(t, rewards.Add(db, rwd)) + rwds[i] = *rwd + } + + svc := NewRewardStreamService(db) + cfg, cleanup := launchServer(t, svc) + t.Cleanup(cleanup) - conn := dialGrpc(t, cfg) - client := spacemeshv2alpha1.NewRewardStreamServiceClient(conn) + conn := dialGrpc(t, cfg) + return spacemeshv2alpha1.NewRewardStreamServiceClient(conn) + } t.Run("all", func(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) - stream, err := client.Stream(ctx, &spacemeshv2alpha1.RewardStreamRequest{}) + client := setup(t) + + stream, err := client.Stream(context.Background(), &spacemeshv2alpha1.RewardStreamRequest{}) require.NoError(t, err) var i int @@ -136,19 +146,21 @@ func TestRewardStreamService_Stream(t *testing.T) { } i++ } - require.Len(t, rwds, i) + require.Equal(t, 100, i) }) t.Run("watch", func(t *testing.T) { events.InitializeReporter() t.Cleanup(events.CloseEventReporter) + client := setup(t) + const ( start = 100 n = 10 ) - gen = fixture.NewRewardsGenerator().WithLayers(start, 10) + gen := fixture.NewRewardsGenerator().WithLayers(start, 10) var streamed []types.Reward for i := 0; i < n; i++ { rwd := gen.Next() @@ -183,7 +195,7 @@ func TestRewardStreamService_Stream(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - stream, err := client.Stream(ctx, tc.request) + stream, err := client.Stream(context.Background(), tc.request) require.NoError(t, err) _, err = stream.Header() require.NoError(t, err) @@ -191,7 +203,7 @@ func TestRewardStreamService_Stream(t *testing.T) { var expect []*types.Reward for _, rst := range streamed { require.NoError(t, events.ReportRewardReceived(rst)) - matcher := rewardsMatcher{tc.request, ctx} + matcher := rewardsMatcher{tc.request, context.Background()} if matcher.match(&rst) { expect = append(expect, &rst) } diff --git a/api/grpcserver/v2alpha1/transaction_test.go b/api/grpcserver/v2alpha1/transaction_test.go index c94a5287c9..c743c6e842 100644 --- a/api/grpcserver/v2alpha1/transaction_test.go +++ b/api/grpcserver/v2alpha1/transaction_test.go @@ -38,7 +38,7 @@ import ( func TestTransactionService_List(t *testing.T) { types.SetLayersPerEpoch(5) - db := statesql.InMemory() + db := statesql.InMemoryTest(t) ctx := context.Background() gen := fixture.NewTransactionResultGenerator().WithAddresses(2) @@ -223,7 +223,7 @@ func TestTransactionService_List(t *testing.T) { func TestTransactionService_EstimateGas(t *testing.T) { types.SetLayersPerEpoch(5) - db := statesql.InMemory() + db := statesql.InMemoryTest(t) vminst := vm.New(db) ctx := context.Background() @@ -289,7 +289,7 @@ func TestTransactionService_EstimateGas(t *testing.T) { func TestTransactionService_ParseTransaction(t *testing.T) { types.SetLayersPerEpoch(5) - db := statesql.InMemory() + db := statesql.InMemoryTest(t) vminst := vm.New(db) ctx := context.Background() @@ -408,7 +408,7 @@ func TestTransactionServiceSubmitUnsync(t *testing.T) { txHandler := NewMocktransactionValidator(ctrl) txHandler.EXPECT().VerifyAndCacheTx(gomock.Any(), gomock.Any()).Return(nil) - svc := NewTransactionService(statesql.InMemory(), nil, syncer, txHandler, publisher) + svc := NewTransactionService(statesql.InMemoryTest(t), nil, syncer, txHandler, publisher) cfg, cleanup := launchServer(t, svc) t.Cleanup(cleanup) @@ -451,7 +451,7 @@ func TestTransactionServiceSubmitInvalidTx(t *testing.T) { txHandler := NewMocktransactionValidator(ctrl) txHandler.EXPECT().VerifyAndCacheTx(gomock.Any(), gomock.Any()).Return(errors.New("failed validation")) - svc := NewTransactionService(statesql.InMemory(), nil, syncer, txHandler, publisher) + svc := NewTransactionService(statesql.InMemoryTest(t), nil, syncer, txHandler, publisher) cfg, cleanup := launchServer(t, svc) t.Cleanup(cleanup) @@ -488,7 +488,7 @@ func TestTransactionService_SubmitNoConcurrency(t *testing.T) { txHandler := NewMocktransactionValidator(ctrl) txHandler.EXPECT().VerifyAndCacheTx(gomock.Any(), gomock.Any()).Return(nil).Times(numTxs) - svc := NewTransactionService(statesql.InMemory(), nil, syncer, txHandler, publisher) + svc := NewTransactionService(statesql.InMemoryTest(t), nil, syncer, txHandler, publisher) cfg, cleanup := launchServer(t, svc) t.Cleanup(cleanup) diff --git a/beacon/handlers_test.go b/beacon/handlers_test.go index 3fe1bcdd98..875c430a3c 100644 --- a/beacon/handlers_test.go +++ b/beacon/handlers_test.go @@ -1095,7 +1095,7 @@ func Test_HandleFirstVotes_FailedToVerifySig(t *testing.T) { tpd.mClock.EXPECT().CurrentLayer().Return(epoch.FirstLayer()) tpd.mClock.EXPECT().LayerToTime(gomock.Any()).Return(time.Now()).AnyTimes() got := tpd.HandleFirstVotes(context.Background(), "peerID", msgBytes) - require.Contains(t, got.Error(), fmt.Sprintf("verify signature %s: failed", msg.Signature)) + require.ErrorContains(t, got, fmt.Sprintf("verify signature %s: failed", msg.Signature)) checkVoted(t, tpd.ProtocolDriver, epoch, signer, types.FirstRound, false) checkFirstIncomingVotes(t, tpd.ProtocolDriver, epoch, map[types.NodeID]proposalList{}) } @@ -1366,7 +1366,7 @@ func Test_handleFollowingVotes_FailedToVerifySig(t *testing.T) { tpd.mClock.EXPECT().CurrentLayer().Return(epoch.FirstLayer()) tpd.mClock.EXPECT().LayerToTime(gomock.Any()).Return(time.Now()).AnyTimes() got := tpd.HandleFollowingVotes(context.Background(), "peerID", msgBytes) - require.Contains(t, got.Error(), fmt.Sprintf("verify signature %s: failed", msg.Signature)) + require.ErrorContains(t, got, fmt.Sprintf("verify signature %s: failed", msg.Signature)) checkVoted(t, tpd.ProtocolDriver, epoch, signer, round, false) checkVoteMargins(t, tpd.ProtocolDriver, epoch, emptyVoteMargins(plist)) } diff --git a/common/util/json_test.go b/common/util/json_test.go index cfbfd776b1..b8d3ef8a51 100644 --- a/common/util/json_test.go +++ b/common/util/json_test.go @@ -17,28 +17,14 @@ package util import ( - "bytes" "encoding/hex" "encoding/json" "errors" + "strconv" "testing" -) -func checkError(t *testing.T, input string, got, want error) bool { - if got == nil { - if want != nil { - t.Errorf("input %s: got no error, want %q", input, want) - return false - } - return true - } - if want == nil { - t.Errorf("input %s: unexpected error %q", input, got) - } else if got.Error() != want.Error() { - t.Errorf("input %s: got error %q, want %q", input, got, want) - } - return false -} + "github.com/stretchr/testify/require" +) func referenceBytes(s string) []byte { b, err := hex.DecodeString(s) @@ -48,18 +34,18 @@ func referenceBytes(s string) []byte { return b } -var errJSONEOF = errors.New("unexpected end of JSON input") - -var unmarshalBytesTests = []unmarshalTest{ +var unmarshalBytesErrorTests = []unmarshalTest{ // invalid encoding - {input: "", wantErr: errJSONEOF}, + {input: "", wantErr: errors.New("unexpected end of JSON input")}, {input: "null", wantErr: errNonString(bytesT)}, {input: "10", wantErr: errNonString(bytesT)}, {input: `"0"`, wantErr: wrapTypeError(ErrMissingPrefix, bytesT)}, {input: `"0x0"`, wantErr: wrapTypeError(ErrOddLength, bytesT)}, {input: `"0xxx"`, wantErr: wrapTypeError(ErrSyntax, bytesT)}, {input: `"0x01zz01"`, wantErr: wrapTypeError(ErrSyntax, bytesT)}, +} +var unmarshalBytesTests = []unmarshalTest{ // valid encoding {input: `""`, want: referenceBytes("")}, {input: `"0x"`, want: referenceBytes("")}, @@ -73,16 +59,17 @@ var unmarshalBytesTests = []unmarshalTest{ } func TestUnmarshalBytes(t *testing.T) { + for _, test := range unmarshalBytesErrorTests { + var v Bytes + err := json.Unmarshal([]byte(test.input), &v) + require.EqualError(t, err, test.wantErr.Error()) + } + for _, test := range unmarshalBytesTests { var v Bytes err := json.Unmarshal([]byte(test.input), &v) - if !checkError(t, test.input, err, test.wantErr) { - continue - } - if !bytes.Equal(test.want.([]byte), []byte(v)) { - t.Errorf("input %s: value mismatch: got %x, want %x", test.input, &v, test.want) - continue - } + require.NoError(t, err) + require.Equal(t, test.want.([]byte), []byte(v)) } } @@ -100,17 +87,8 @@ func TestMarshalBytes(t *testing.T) { for _, test := range encodeBytesTests { in := test.input.([]byte) out, err := json.Marshal(Bytes(in)) - if err != nil { - t.Errorf("%x: %v", in, err) - continue - } - if want := `"` + test.want + `"`; string(out) != want { - t.Errorf("%x: MarshalJSON output mismatch: got %q, want %q", in, out, want) - continue - } - if out := Bytes(in).String(); out != test.want { - t.Errorf("%x: String mismatch: got %q, want %q", in, out, test.want) - continue - } + require.NoError(t, err) + require.Equal(t, strconv.Quote(test.want), string(out)) + require.Equal(t, test.want, Bytes(in).String()) } } diff --git a/datastore/store.go b/datastore/store.go index 3eaa6db83c..aee925cb02 100644 --- a/datastore/store.go +++ b/datastore/store.go @@ -10,9 +10,7 @@ import ( "go.uber.org/zap" "github.com/spacemeshos/go-spacemesh/atxsdata" - "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" - "github.com/spacemeshos/go-spacemesh/malfeasance/wire" "github.com/spacemeshos/go-spacemesh/proposals/store" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/activesets" @@ -45,7 +43,7 @@ type CachedDB struct { // used to coordinate db update and cache mu sync.Mutex - malfeasanceCache *lru.Cache[types.NodeID, *wire.MalfeasanceProof] + malfeasanceCache *lru.Cache[types.NodeID, []byte] } type Config struct { @@ -95,7 +93,7 @@ func NewCachedDB(db sql.StateDatabase, lg *zap.Logger, opts ...Opt) *CachedDB { lg.Fatal("failed to create atx cache", zap.Error(err)) } - malfeasanceCache, err := lru.New[types.NodeID, *wire.MalfeasanceProof](o.cfg.MalfeasanceSize) + malfeasanceCache, err := lru.New[types.NodeID, []byte](o.cfg.MalfeasanceSize) if err != nil { lg.Fatal("failed to create malfeasance cache", zap.Error(err)) } @@ -120,7 +118,7 @@ func (db *CachedDB) MalfeasanceCacheSize() int { } // GetMalfeasanceProof gets the malfeasance proof associated with the NodeID. -func (db *CachedDB) MalfeasanceProof(id types.NodeID) (*wire.MalfeasanceProof, error) { +func (db *CachedDB) MalfeasanceProof(id types.NodeID) ([]byte, error) { if id == types.EmptyNodeID { panic("invalid argument to GetMalfeasanceProof") } @@ -139,13 +137,11 @@ func (db *CachedDB) MalfeasanceProof(id types.NodeID) (*wire.MalfeasanceProof, e if err != nil && err != sql.ErrNotFound { return nil, err } - proof := &wire.MalfeasanceProof{} - codec.MustDecode(blob.Bytes, proof) - db.malfeasanceCache.Add(id, proof) - return proof, err + db.malfeasanceCache.Add(id, blob.Bytes) + return blob.Bytes, err } -func (db *CachedDB) CacheMalfeasanceProof(id types.NodeID, proof *wire.MalfeasanceProof) { +func (db *CachedDB) CacheMalfeasanceProof(id types.NodeID, proof []byte) { if id == types.EmptyNodeID { panic("invalid argument to CacheMalfeasanceProof") } @@ -200,7 +196,7 @@ func (db *CachedDB) Previous(id types.ATXID) ([]types.ATXID, error) { } func (db *CachedDB) IterateMalfeasanceProofs( - iter func(types.NodeID, *wire.MalfeasanceProof) error, + iter func(types.NodeID, []byte) error, ) error { ids, err := identities.GetMalicious(db) if err != nil { diff --git a/datastore/store_test.go b/datastore/store_test.go index a5f474a342..4517fb5682 100644 --- a/datastore/store_test.go +++ b/datastore/store_test.go @@ -56,19 +56,7 @@ func TestMalfeasanceProof_Dishonest(t *testing.T) { cdb := datastore.NewCachedDB(db, zaptest.NewLogger(t)) require.Equal(t, 0, cdb.MalfeasanceCacheSize()) - // a bad guy - proof := &mwire.MalfeasanceProof{ - Layer: types.LayerID(11), - Proof: mwire.Proof{ - Type: mwire.MultipleBallots, - Data: &mwire.BallotProof{ - Messages: [2]mwire.BallotProofMsg{ - {}, - {}, - }, - }, - }, - } + proof := types.RandomBytes(100) nodeID1 := types.NodeID{1} cdb.CacheMalfeasanceProof(nodeID1, proof) diff --git a/events/events.go b/events/events.go index 30107a733b..e13cd05c80 100644 --- a/events/events.go +++ b/events/events.go @@ -256,14 +256,14 @@ func EmitProposal(nodeID types.NodeID, layer types.LayerID, proposal types.Propo ) } -func EmitOwnMalfeasanceProof(nodeID types.NodeID, mp *wire.MalfeasanceProof) { +func EmitOwnMalfeasanceProof(nodeID types.NodeID, proof []byte) { const help = "Node committed malicious behavior. Identity will be canceled." emitUserEvent( help, false, &pb.Event_Malfeasance{ Malfeasance: &pb.EventMalfeasance{ - Proof: ToMalfeasancePB(nodeID, mp, false), + Proof: ToMalfeasancePB(nodeID, proof, false), }, }, ) @@ -284,8 +284,9 @@ func emitUserEvent(help string, failure bool, details pb.IsEventDetails) { } } -func ToMalfeasancePB(nodeID types.NodeID, mp *wire.MalfeasanceProof, includeProof bool) *pb.MalfeasanceProof { - if mp == nil { +func ToMalfeasancePB(nodeID types.NodeID, proof []byte, includeProof bool) *pb.MalfeasanceProof { + mp := &wire.MalfeasanceProof{} + if err := codec.Decode(proof, mp); err != nil { return &pb.MalfeasanceProof{} } kind := pb.MalfeasanceProof_MALFEASANCE_UNSPECIFIED @@ -308,8 +309,7 @@ func ToMalfeasancePB(nodeID types.NodeID, mp *wire.MalfeasanceProof, includeProo DebugInfo: wire.MalfeasanceInfo(nodeID, mp), } if includeProof { - data, _ := codec.Encode(mp) - result.Proof = data + result.Proof = proof } return result } diff --git a/events/malfeasance.go b/events/malfeasance.go index 073a191b99..4ea0ef6ea8 100644 --- a/events/malfeasance.go +++ b/events/malfeasance.go @@ -3,13 +3,12 @@ package events import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/log" - "github.com/spacemeshos/go-spacemesh/malfeasance/wire" ) // EventMalfeasance includes the malfeasance proof. type EventMalfeasance struct { Smesher types.NodeID - Proof *wire.MalfeasanceProof + Proof []byte } // SubscribeMalfeasance subscribes malfeasance events. @@ -27,11 +26,11 @@ func SubscribeMalfeasance() Subscription { } // ReportMalfeasance reports a malfeasance proof. -func ReportMalfeasance(nodeID types.NodeID, mp *wire.MalfeasanceProof) { +func ReportMalfeasance(nodeID types.NodeID, proof []byte) { mu.RLock() defer mu.RUnlock() if reporter != nil { - if err := reporter.malfeasanceEmitter.Emit(EventMalfeasance{Smesher: nodeID, Proof: mp}); err != nil { + if err := reporter.malfeasanceEmitter.Emit(EventMalfeasance{Smesher: nodeID, Proof: proof}); err != nil { log.With().Error("failed to emit malfeasance proof", log.Err(err)) } } diff --git a/go.mod b/go.mod index 3315959261..95a0a5e25b 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/seehuhn/mt19937 v1.0.0 github.com/slok/go-http-metrics v0.12.0 - github.com/spacemeshos/api/release/go v1.52.0 + github.com/spacemeshos/api/release/go v1.53.0 github.com/spacemeshos/economics v0.1.3 github.com/spacemeshos/fixed v0.1.1 github.com/spacemeshos/go-scale v1.2.0 diff --git a/go.sum b/go.sum index ab43c79114..a1de10a212 100644 --- a/go.sum +++ b/go.sum @@ -603,8 +603,8 @@ github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:Udh github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemeshos/api/release/go v1.52.0 h1:3cohOoFIk0RLF5fdL0y6pFgZ7Ngg1Yht+aeN3Xm5Qn8= -github.com/spacemeshos/api/release/go v1.52.0/go.mod h1:Qr/pVPMmN5Q5qLHSXqVMDKDCu6LkHWzGPNflylE0u00= +github.com/spacemeshos/api/release/go v1.53.0 h1:NGPCPNMwkQtPgx2P/bmhvUdGFyv78UMSTGYvkj1JIlo= +github.com/spacemeshos/api/release/go v1.53.0/go.mod h1:nIWzRxJe365XvjN51AhfwR6Lf0EDaMcnmAb6hd2D0xw= github.com/spacemeshos/economics v0.1.3 h1:ACkq3mTebIky4Zwbs9SeSSRZrUCjU/Zk0wq9Z0BTh2A= github.com/spacemeshos/economics v0.1.3/go.mod h1:FH7u0FzTIm6Kpk+X5HOZDvpkgNYBKclmH86rVwYaDAo= github.com/spacemeshos/fixed v0.1.1 h1:N1y4SUpq1EV+IdJrWJwUCt1oBFzeru/VKVcBsvPc2Fk= diff --git a/hare3/hare.go b/hare3/hare.go index a4c3dd3326..5eb085e092 100644 --- a/hare3/hare.go +++ b/hare3/hare.go @@ -292,7 +292,7 @@ func (h *Hare) Running() int { return len(h.sessions) } -func (h *Hare) Handler(ctx context.Context, peer p2p.Peer, buf []byte) error { +func (h *Hare) Handler(ctx context.Context, _ p2p.Peer, buf []byte) error { msg := &Message{} if err := codec.Decode(buf, msg); err != nil { malformedError.Inc() diff --git a/hare3/malfeasance.go b/hare3/malfeasance.go index e71a9c6985..e7128ea3bd 100644 --- a/hare3/malfeasance.go +++ b/hare3/malfeasance.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strconv" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" @@ -52,6 +53,20 @@ func NewMalfeasanceHandler( return mh } +func (mh *MalfeasanceHandler) Info(data wire.ProofData) (map[string]string, error) { + hp, ok := data.(*wire.HareProof) + if !ok { + return nil, errors.New("wrong message type for hare equivocation") + } + return map[string]string{ + "msg1": hp.Messages[0].InnerMsg.MsgHash.String(), + "msg2": hp.Messages[1].InnerMsg.MsgHash.String(), + "layer": hp.Messages[0].InnerMsg.Layer.String(), + "round": strconv.FormatUint(uint64(hp.Messages[0].InnerMsg.Round), 10), + "smesher_id": hp.Messages[0].SmesherID.String(), + }, nil +} + func (mh *MalfeasanceHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { hp, ok := data.(*wire.HareProof) if !ok { diff --git a/malfeasance/handler.go b/malfeasance/handler.go index 45acdfcd54..5d4eea62a9 100644 --- a/malfeasance/handler.go +++ b/malfeasance/handler.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "slices" + "strconv" "time" "go.uber.org/zap" @@ -32,31 +33,22 @@ var ( type MalfeasanceType byte const ( - // V1 types. MultipleATXs MalfeasanceType = MalfeasanceType(wire.MultipleATXs) MultipleBallots = MalfeasanceType(wire.MultipleBallots) HareEquivocation = MalfeasanceType(wire.HareEquivocation) InvalidPostIndex = MalfeasanceType(wire.InvalidPostIndex) InvalidPrevATX = MalfeasanceType(wire.InvalidPrevATX) - - // V2 types - // TODO(mafa): for future use. - InvalidActivation MalfeasanceType = iota + 10 - InvalidBallot - InvalidHareMsg ) // Handler processes MalfeasanceProof from gossip and, if deems it valid, propagates it to peers. type Handler struct { - logger *zap.Logger - cdb *datastore.CachedDB - - handlersV1 map[MalfeasanceType]HandlerV1 - handlersV2 map[MalfeasanceType]HandlerV2 - + logger *zap.Logger + cdb *datastore.CachedDB self p2p.Peer nodeIDs []types.NodeID tortoise tortoise + + handlers map[MalfeasanceType]MalfeasanceHandler } func NewHandler( @@ -73,33 +65,50 @@ func NewHandler( nodeIDs: nodeID, tortoise: tortoise, - handlersV1: make(map[MalfeasanceType]HandlerV1), - handlersV2: make(map[MalfeasanceType]HandlerV2), + handlers: make(map[MalfeasanceType]MalfeasanceHandler), } } -func (h *Handler) RegisterHandlerV1(malfeasanceType MalfeasanceType, handler HandlerV1) { - h.handlersV1[malfeasanceType] = handler -} +func (h *Handler) RegisterHandler(malfeasanceType MalfeasanceType, handler MalfeasanceHandler) { + if _, ok := h.handlers[malfeasanceType]; ok { + h.logger.Panic("handler already registered", zap.Int("malfeasanceType", int(malfeasanceType))) + } -func (h *Handler) RegisterHandlerV2(malfeasanceType MalfeasanceType, handler HandlerV2) { - h.handlersV2[malfeasanceType] = handler + h.handlers[malfeasanceType] = handler } -func (h *Handler) reportMalfeasance(smesher types.NodeID, mp *wire.MalfeasanceProof) { +func (h *Handler) reportMalfeasance(smesher types.NodeID, proof []byte) { h.tortoise.OnMalfeasance(smesher) - events.ReportMalfeasance(smesher, mp) + events.ReportMalfeasance(smesher, proof) if slices.Contains(h.nodeIDs, smesher) { - events.EmitOwnMalfeasanceProof(smesher, mp) + events.EmitOwnMalfeasanceProof(smesher, proof) } } func (h *Handler) countProof(mp *wire.MalfeasanceProof) { - h.handlersV1[MalfeasanceType(mp.Proof.Type)].ReportProof(numProofs) + h.handlers[MalfeasanceType(mp.Proof.Type)].ReportProof(numProofs) } func (h *Handler) countInvalidProof(p *wire.MalfeasanceProof) { - h.handlersV1[MalfeasanceType(p.Proof.Type)].ReportInvalidProof(numInvalidProofs) + h.handlers[MalfeasanceType(p.Proof.Type)].ReportInvalidProof(numInvalidProofs) +} + +func (h *Handler) Info(data []byte) (map[string]string, error) { + var p wire.MalfeasanceProof + if err := codec.Decode(data, &p); err != nil { + return nil, fmt.Errorf("decode malfeasance proof: %w", err) + } + mh, ok := h.handlers[MalfeasanceType(p.Proof.Type)] + if !ok { + return nil, fmt.Errorf("unknown malfeasance type %d", p.Proof.Type) + } + properties, err := mh.Info(p.Proof.Data) + if err != nil { + return nil, fmt.Errorf("malfeasance info: %w", err) + } + properties["domain"] = "0" // for malfeasance V1 there are no domains + properties["type"] = strconv.FormatUint(uint64(p.Proof.Type), 10) + return properties, nil } // HandleSyncedMalfeasanceProof is the sync validator for MalfeasanceProof. @@ -115,7 +124,7 @@ func (h *Handler) HandleSyncedMalfeasanceProof( h.logger.Error("malformed message (sync)", log.ZContext(ctx), zap.Error(err)) return errMalformedData } - nodeID, err := h.validateAndSave(ctx, &wire.MalfeasanceGossip{MalfeasanceProof: p}) + nodeID, err := h.validateAndSave(ctx, &p) if err == nil && types.Hash32(nodeID) != expHash { return fmt.Errorf( "%w: malfeasance proof want %s, got %s", @@ -135,52 +144,48 @@ func (h *Handler) HandleMalfeasanceProof(ctx context.Context, peer p2p.Peer, dat h.logger.Error("malformed message", log.ZContext(ctx), zap.Error(err)) return errMalformedData } + if p.Eligibility != nil { + numMalformed.Inc() + return fmt.Errorf("%w: eligibility field was deprecated with hare3", pubsub.ErrValidationReject) + } if peer == h.self { - id, err := h.Validate(ctx, &p) + id, err := h.Validate(ctx, &p.MalfeasanceProof) if err != nil { h.countInvalidProof(&p.MalfeasanceProof) return err } - h.reportMalfeasance(id, &p.MalfeasanceProof) + h.reportMalfeasance(id, codec.MustEncode(&p.MalfeasanceProof)) // node saves malfeasance proof eagerly/atomically with the malicious data. // it has validated the proof before saving to db. h.countProof(&p.MalfeasanceProof) return nil } - _, err := h.validateAndSave(ctx, &p) + _, err := h.validateAndSave(ctx, &p.MalfeasanceProof) return err } -func (h *Handler) validateAndSave(ctx context.Context, p *wire.MalfeasanceGossip) (types.NodeID, error) { - if p.Eligibility != nil { - numMalformed.Inc() - return types.EmptyNodeID, fmt.Errorf( - "%w: eligibility field was deprecated with hare3", - pubsub.ErrValidationReject, - ) - } +func (h *Handler) validateAndSave(ctx context.Context, p *wire.MalfeasanceProof) (types.NodeID, error) { + p.SetReceived(time.Now()) nodeID, err := h.Validate(ctx, p) switch { case errors.Is(err, errUnknownProof): numMalformed.Inc() return types.EmptyNodeID, err case err != nil: - h.countInvalidProof(&p.MalfeasanceProof) + h.countInvalidProof(p) return types.EmptyNodeID, errors.Join(err, pubsub.ErrValidationReject) } + proofBytes := codec.MustEncode(p) if err := h.cdb.WithTx(ctx, func(dbtx sql.Transaction) error { malicious, err := identities.IsMalicious(dbtx, nodeID) if err != nil { return fmt.Errorf("check known malicious: %w", err) - } else if malicious { + } + if malicious { h.logger.Debug("known malicious identity", log.ZContext(ctx), zap.Stringer("smesher", nodeID)) return ErrKnownProof } - encoded, err := codec.Encode(&p.MalfeasanceProof) - if err != nil { - h.logger.Panic("failed to encode MalfeasanceProof", zap.Error(err)) - } - if err := identities.SetMalicious(dbtx, nodeID, encoded, time.Now()); err != nil { + if err := identities.SetMalicious(dbtx, nodeID, proofBytes, time.Now()); err != nil { return fmt.Errorf("add malfeasance proof: %w", err) } return nil @@ -193,11 +198,11 @@ func (h *Handler) validateAndSave(ctx context.Context, p *wire.MalfeasanceGossip zap.Error(err), ) } - return types.EmptyNodeID, err + return nodeID, err } - h.reportMalfeasance(nodeID, &p.MalfeasanceProof) - h.cdb.CacheMalfeasanceProof(nodeID, &p.MalfeasanceProof) - h.countProof(&p.MalfeasanceProof) + h.reportMalfeasance(nodeID, proofBytes) + h.cdb.CacheMalfeasanceProof(nodeID, proofBytes) + h.countProof(p) h.logger.Debug("new malfeasance proof", log.ZContext(ctx), zap.Stringer("smesher", nodeID), @@ -206,8 +211,8 @@ func (h *Handler) validateAndSave(ctx context.Context, p *wire.MalfeasanceGossip return nodeID, nil } -func (h *Handler) Validate(ctx context.Context, p *wire.MalfeasanceGossip) (types.NodeID, error) { - mh, ok := h.handlersV1[MalfeasanceType(p.Proof.Type)] +func (h *Handler) Validate(ctx context.Context, p *wire.MalfeasanceProof) (types.NodeID, error) { + mh, ok := h.handlers[MalfeasanceType(p.Proof.Type)] if !ok { return types.EmptyNodeID, fmt.Errorf("%w: unknown malfeasance type", errUnknownProof) } diff --git a/malfeasance/handler_test.go b/malfeasance/handler_test.go index 0a9d09d40f..bdc5768537 100644 --- a/malfeasance/handler_test.go +++ b/malfeasance/handler_test.go @@ -3,6 +3,8 @@ package malfeasance import ( "context" "errors" + "fmt" + "strconv" "testing" "time" @@ -92,7 +94,7 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { h := newHandler(t) ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) @@ -100,7 +102,7 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { }, ) handler.EXPECT().ReportInvalidProof(gomock.Any()) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) gossip := &wire.MalfeasanceGossip{ MalfeasanceProof: wire.MalfeasanceProof{ @@ -122,7 +124,7 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { nodeID := types.RandomNodeID() ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) @@ -130,7 +132,7 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { }, ) handler.EXPECT().ReportProof(gomock.Any()) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) gossip := &wire.MalfeasanceGossip{ MalfeasanceProof: wire.MalfeasanceProof{ @@ -165,14 +167,14 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { identities.SetMalicious(h.db, nodeID, codec.MustEncode(proof), time.Now()) ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) return nodeID, nil }, ) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) gossip := &wire.MalfeasanceGossip{ MalfeasanceProof: wire.MalfeasanceProof{ @@ -233,7 +235,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { nodeID := types.RandomNodeID() ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) @@ -241,7 +243,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { }, ) handler.EXPECT().ReportProof(gomock.Any()) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) proof := &wire.MalfeasanceProof{ Layer: types.LayerID(22), @@ -267,7 +269,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { nodeID := types.RandomNodeID() ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) @@ -275,7 +277,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { }, ) handler.EXPECT().ReportInvalidProof(gomock.Any()) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) proof := &wire.MalfeasanceProof{ Layer: types.LayerID(22), @@ -300,7 +302,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { nodeID := types.RandomNodeID() ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) @@ -308,7 +310,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { }, ) handler.EXPECT().ReportProof(gomock.Any()) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) proof := &wire.MalfeasanceProof{ Layer: types.LayerID(22), @@ -343,14 +345,14 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { identities.SetMalicious(h.db, nodeID, proofBytes, time.Now()) ctrl := gomock.NewController(t) - handler := NewMockHandlerV1(ctrl) + handler := NewMockMalfeasanceHandler(ctrl) handler.EXPECT().Validate(gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, data wire.ProofData) (types.NodeID, error) { require.IsType(t, &wire.AtxProof{}, data) return nodeID, nil }, ) - h.RegisterHandlerV1(MultipleATXs, handler) + h.RegisterHandler(MultipleATXs, handler) newProof := &wire.MalfeasanceProof{ Layer: types.LayerID(22), @@ -370,3 +372,85 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { require.Equal(t, proofBytes, blob.Bytes) }) } + +func TestHandler_Info(t *testing.T) { + t.Run("malformed data", func(t *testing.T) { + h := newHandler(t) + + info, err := h.Info(types.RandomBytes(32)) + require.ErrorContains(t, err, "decode malfeasance proof:") + require.Nil(t, info) + }) + + t.Run("unknown malfeasance type", func(t *testing.T) { + h := newHandler(t) + + proof := &wire.MalfeasanceProof{ + Layer: types.LayerID(22), + Proof: wire.Proof{ + Type: wire.MultipleATXs, + Data: &wire.AtxProof{}, + }, + } + proofBytes := codec.MustEncode(proof) + + info, err := h.Info(proofBytes) + require.ErrorContains(t, err, fmt.Sprintf("unknown malfeasance type %d", wire.MultipleATXs)) + require.Nil(t, info) + }) + + t.Run("invalid proof", func(t *testing.T) { + h := newHandler(t) + + ctrl := gomock.NewController(t) + handler := NewMockMalfeasanceHandler(ctrl) + handler.EXPECT().Info(gomock.Any()).Return(nil, errors.New("invalid proof")) + h.RegisterHandler(MultipleATXs, handler) + + proof := &wire.MalfeasanceProof{ + Layer: types.LayerID(22), + Proof: wire.Proof{ + Type: wire.MultipleATXs, + Data: &wire.AtxProof{}, + }, + } + proofBytes := codec.MustEncode(proof) + + info, err := h.Info(proofBytes) + require.ErrorContains(t, err, "invalid proof") + require.Nil(t, info) + }) + + t.Run("valid proof", func(t *testing.T) { + h := newHandler(t) + + properties := map[string]string{ + "key": "value", + } + + ctrl := gomock.NewController(t) + handler := NewMockMalfeasanceHandler(ctrl) + handler.EXPECT().Info(gomock.Any()).Return(properties, nil) + h.RegisterHandler(MultipleATXs, handler) + + proof := &wire.MalfeasanceProof{ + Layer: types.LayerID(22), + Proof: wire.Proof{ + Type: wire.MultipleATXs, + Data: &wire.AtxProof{}, + }, + } + proofBytes := codec.MustEncode(proof) + expectedProperties := map[string]string{ + "domain": "0", + "type": strconv.FormatUint(uint64(wire.MultipleATXs), 10), + } + for k, v := range properties { + expectedProperties[k] = v + } + + info, err := h.Info(proofBytes) + require.NoError(t, err) + require.Equal(t, expectedProperties, info) + }) +} diff --git a/malfeasance/interface.go b/malfeasance/interface.go index 46b3cdb9f9..3486d5878f 100644 --- a/malfeasance/interface.go +++ b/malfeasance/interface.go @@ -15,12 +15,9 @@ type tortoise interface { OnMalfeasance(types.NodeID) } -type HandlerV1 interface { +type MalfeasanceHandler interface { Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) + Info(data wire.ProofData) (map[string]string, error) ReportProof(vec *prometheus.CounterVec) ReportInvalidProof(vec *prometheus.CounterVec) } - -type HandlerV2 interface { - Validate(ctx context.Context, data []byte) (types.NodeID, error) -} diff --git a/malfeasance/mocks.go b/malfeasance/mocks.go index d0be0c3a1a..f123149e61 100644 --- a/malfeasance/mocks.go +++ b/malfeasance/mocks.go @@ -78,165 +78,142 @@ func (c *MocktortoiseOnMalfeasanceCall) DoAndReturn(f func(types.NodeID)) *Mockt return c } -// MockHandlerV1 is a mock of HandlerV1 interface. -type MockHandlerV1 struct { +// MockMalfeasanceHandler is a mock of MalfeasanceHandler interface. +type MockMalfeasanceHandler struct { ctrl *gomock.Controller - recorder *MockHandlerV1MockRecorder + recorder *MockMalfeasanceHandlerMockRecorder } -// MockHandlerV1MockRecorder is the mock recorder for MockHandlerV1. -type MockHandlerV1MockRecorder struct { - mock *MockHandlerV1 +// MockMalfeasanceHandlerMockRecorder is the mock recorder for MockMalfeasanceHandler. +type MockMalfeasanceHandlerMockRecorder struct { + mock *MockMalfeasanceHandler } -// NewMockHandlerV1 creates a new mock instance. -func NewMockHandlerV1(ctrl *gomock.Controller) *MockHandlerV1 { - mock := &MockHandlerV1{ctrl: ctrl} - mock.recorder = &MockHandlerV1MockRecorder{mock} +// NewMockMalfeasanceHandler creates a new mock instance. +func NewMockMalfeasanceHandler(ctrl *gomock.Controller) *MockMalfeasanceHandler { + mock := &MockMalfeasanceHandler{ctrl: ctrl} + mock.recorder = &MockMalfeasanceHandlerMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockHandlerV1) EXPECT() *MockHandlerV1MockRecorder { +func (m *MockMalfeasanceHandler) EXPECT() *MockMalfeasanceHandlerMockRecorder { return m.recorder } -// ReportInvalidProof mocks base method. -func (m *MockHandlerV1) ReportInvalidProof(vec *prometheus.CounterVec) { +// Info mocks base method. +func (m *MockMalfeasanceHandler) Info(data wire.ProofData) (map[string]string, error) { m.ctrl.T.Helper() - m.ctrl.Call(m, "ReportInvalidProof", vec) + ret := m.ctrl.Call(m, "Info", data) + ret0, _ := ret[0].(map[string]string) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// ReportInvalidProof indicates an expected call of ReportInvalidProof. -func (mr *MockHandlerV1MockRecorder) ReportInvalidProof(vec any) *MockHandlerV1ReportInvalidProofCall { +// Info indicates an expected call of Info. +func (mr *MockMalfeasanceHandlerMockRecorder) Info(data any) *MockMalfeasanceHandlerInfoCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReportInvalidProof", reflect.TypeOf((*MockHandlerV1)(nil).ReportInvalidProof), vec) - return &MockHandlerV1ReportInvalidProofCall{Call: call} + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Info", reflect.TypeOf((*MockMalfeasanceHandler)(nil).Info), data) + return &MockMalfeasanceHandlerInfoCall{Call: call} } -// MockHandlerV1ReportInvalidProofCall wrap *gomock.Call -type MockHandlerV1ReportInvalidProofCall struct { +// MockMalfeasanceHandlerInfoCall wrap *gomock.Call +type MockMalfeasanceHandlerInfoCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return -func (c *MockHandlerV1ReportInvalidProofCall) Return() *MockHandlerV1ReportInvalidProofCall { - c.Call = c.Call.Return() +func (c *MockMalfeasanceHandlerInfoCall) Return(arg0 map[string]string, arg1 error) *MockMalfeasanceHandlerInfoCall { + c.Call = c.Call.Return(arg0, arg1) return c } // Do rewrite *gomock.Call.Do -func (c *MockHandlerV1ReportInvalidProofCall) Do(f func(*prometheus.CounterVec)) *MockHandlerV1ReportInvalidProofCall { +func (c *MockMalfeasanceHandlerInfoCall) Do(f func(wire.ProofData) (map[string]string, error)) *MockMalfeasanceHandlerInfoCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockHandlerV1ReportInvalidProofCall) DoAndReturn(f func(*prometheus.CounterVec)) *MockHandlerV1ReportInvalidProofCall { +func (c *MockMalfeasanceHandlerInfoCall) DoAndReturn(f func(wire.ProofData) (map[string]string, error)) *MockMalfeasanceHandlerInfoCall { c.Call = c.Call.DoAndReturn(f) return c } -// ReportProof mocks base method. -func (m *MockHandlerV1) ReportProof(vec *prometheus.CounterVec) { +// ReportInvalidProof mocks base method. +func (m *MockMalfeasanceHandler) ReportInvalidProof(vec *prometheus.CounterVec) { m.ctrl.T.Helper() - m.ctrl.Call(m, "ReportProof", vec) + m.ctrl.Call(m, "ReportInvalidProof", vec) } -// ReportProof indicates an expected call of ReportProof. -func (mr *MockHandlerV1MockRecorder) ReportProof(vec any) *MockHandlerV1ReportProofCall { +// ReportInvalidProof indicates an expected call of ReportInvalidProof. +func (mr *MockMalfeasanceHandlerMockRecorder) ReportInvalidProof(vec any) *MockMalfeasanceHandlerReportInvalidProofCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReportProof", reflect.TypeOf((*MockHandlerV1)(nil).ReportProof), vec) - return &MockHandlerV1ReportProofCall{Call: call} + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReportInvalidProof", reflect.TypeOf((*MockMalfeasanceHandler)(nil).ReportInvalidProof), vec) + return &MockMalfeasanceHandlerReportInvalidProofCall{Call: call} } -// MockHandlerV1ReportProofCall wrap *gomock.Call -type MockHandlerV1ReportProofCall struct { +// MockMalfeasanceHandlerReportInvalidProofCall wrap *gomock.Call +type MockMalfeasanceHandlerReportInvalidProofCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return -func (c *MockHandlerV1ReportProofCall) Return() *MockHandlerV1ReportProofCall { +func (c *MockMalfeasanceHandlerReportInvalidProofCall) Return() *MockMalfeasanceHandlerReportInvalidProofCall { c.Call = c.Call.Return() return c } // Do rewrite *gomock.Call.Do -func (c *MockHandlerV1ReportProofCall) Do(f func(*prometheus.CounterVec)) *MockHandlerV1ReportProofCall { +func (c *MockMalfeasanceHandlerReportInvalidProofCall) Do(f func(*prometheus.CounterVec)) *MockMalfeasanceHandlerReportInvalidProofCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockHandlerV1ReportProofCall) DoAndReturn(f func(*prometheus.CounterVec)) *MockHandlerV1ReportProofCall { +func (c *MockMalfeasanceHandlerReportInvalidProofCall) DoAndReturn(f func(*prometheus.CounterVec)) *MockMalfeasanceHandlerReportInvalidProofCall { c.Call = c.Call.DoAndReturn(f) return c } -// Validate mocks base method. -func (m *MockHandlerV1) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { +// ReportProof mocks base method. +func (m *MockMalfeasanceHandler) ReportProof(vec *prometheus.CounterVec) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Validate", ctx, data) - ret0, _ := ret[0].(types.NodeID) - ret1, _ := ret[1].(error) - return ret0, ret1 + m.ctrl.Call(m, "ReportProof", vec) } -// Validate indicates an expected call of Validate. -func (mr *MockHandlerV1MockRecorder) Validate(ctx, data any) *MockHandlerV1ValidateCall { +// ReportProof indicates an expected call of ReportProof. +func (mr *MockMalfeasanceHandlerMockRecorder) ReportProof(vec any) *MockMalfeasanceHandlerReportProofCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validate", reflect.TypeOf((*MockHandlerV1)(nil).Validate), ctx, data) - return &MockHandlerV1ValidateCall{Call: call} + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReportProof", reflect.TypeOf((*MockMalfeasanceHandler)(nil).ReportProof), vec) + return &MockMalfeasanceHandlerReportProofCall{Call: call} } -// MockHandlerV1ValidateCall wrap *gomock.Call -type MockHandlerV1ValidateCall struct { +// MockMalfeasanceHandlerReportProofCall wrap *gomock.Call +type MockMalfeasanceHandlerReportProofCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return -func (c *MockHandlerV1ValidateCall) Return(arg0 types.NodeID, arg1 error) *MockHandlerV1ValidateCall { - c.Call = c.Call.Return(arg0, arg1) +func (c *MockMalfeasanceHandlerReportProofCall) Return() *MockMalfeasanceHandlerReportProofCall { + c.Call = c.Call.Return() return c } // Do rewrite *gomock.Call.Do -func (c *MockHandlerV1ValidateCall) Do(f func(context.Context, wire.ProofData) (types.NodeID, error)) *MockHandlerV1ValidateCall { +func (c *MockMalfeasanceHandlerReportProofCall) Do(f func(*prometheus.CounterVec)) *MockMalfeasanceHandlerReportProofCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockHandlerV1ValidateCall) DoAndReturn(f func(context.Context, wire.ProofData) (types.NodeID, error)) *MockHandlerV1ValidateCall { +func (c *MockMalfeasanceHandlerReportProofCall) DoAndReturn(f func(*prometheus.CounterVec)) *MockMalfeasanceHandlerReportProofCall { c.Call = c.Call.DoAndReturn(f) return c } -// MockHandlerV2 is a mock of HandlerV2 interface. -type MockHandlerV2 struct { - ctrl *gomock.Controller - recorder *MockHandlerV2MockRecorder -} - -// MockHandlerV2MockRecorder is the mock recorder for MockHandlerV2. -type MockHandlerV2MockRecorder struct { - mock *MockHandlerV2 -} - -// NewMockHandlerV2 creates a new mock instance. -func NewMockHandlerV2(ctrl *gomock.Controller) *MockHandlerV2 { - mock := &MockHandlerV2{ctrl: ctrl} - mock.recorder = &MockHandlerV2MockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockHandlerV2) EXPECT() *MockHandlerV2MockRecorder { - return m.recorder -} - // Validate mocks base method. -func (m *MockHandlerV2) Validate(ctx context.Context, data []byte) (types.NodeID, error) { +func (m *MockMalfeasanceHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Validate", ctx, data) ret0, _ := ret[0].(types.NodeID) @@ -245,31 +222,31 @@ func (m *MockHandlerV2) Validate(ctx context.Context, data []byte) (types.NodeID } // Validate indicates an expected call of Validate. -func (mr *MockHandlerV2MockRecorder) Validate(ctx, data any) *MockHandlerV2ValidateCall { +func (mr *MockMalfeasanceHandlerMockRecorder) Validate(ctx, data any) *MockMalfeasanceHandlerValidateCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validate", reflect.TypeOf((*MockHandlerV2)(nil).Validate), ctx, data) - return &MockHandlerV2ValidateCall{Call: call} + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validate", reflect.TypeOf((*MockMalfeasanceHandler)(nil).Validate), ctx, data) + return &MockMalfeasanceHandlerValidateCall{Call: call} } -// MockHandlerV2ValidateCall wrap *gomock.Call -type MockHandlerV2ValidateCall struct { +// MockMalfeasanceHandlerValidateCall wrap *gomock.Call +type MockMalfeasanceHandlerValidateCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return -func (c *MockHandlerV2ValidateCall) Return(arg0 types.NodeID, arg1 error) *MockHandlerV2ValidateCall { +func (c *MockMalfeasanceHandlerValidateCall) Return(arg0 types.NodeID, arg1 error) *MockMalfeasanceHandlerValidateCall { c.Call = c.Call.Return(arg0, arg1) return c } // Do rewrite *gomock.Call.Do -func (c *MockHandlerV2ValidateCall) Do(f func(context.Context, []byte) (types.NodeID, error)) *MockHandlerV2ValidateCall { +func (c *MockMalfeasanceHandlerValidateCall) Do(f func(context.Context, wire.ProofData) (types.NodeID, error)) *MockMalfeasanceHandlerValidateCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockHandlerV2ValidateCall) DoAndReturn(f func(context.Context, []byte) (types.NodeID, error)) *MockHandlerV2ValidateCall { +func (c *MockMalfeasanceHandlerValidateCall) DoAndReturn(f func(context.Context, wire.ProofData) (types.NodeID, error)) *MockMalfeasanceHandlerValidateCall { c.Call = c.Call.DoAndReturn(f) return c } diff --git a/malfeasance/wire/malfeasance.go b/malfeasance/wire/malfeasance.go index 0ffd8e4228..32509721a8 100644 --- a/malfeasance/wire/malfeasance.go +++ b/malfeasance/wire/malfeasance.go @@ -101,8 +101,6 @@ type Proof struct { type ProofData interface { scale.Type - - isProof() } func (e *Proof) EncodeScale(enc *scale.Encoder) (int, error) { @@ -199,8 +197,6 @@ type AtxProof struct { Messages [2]AtxProofMsg } -func (ap *AtxProof) isProof() {} - func (ap *AtxProof) MarshalLogObject(encoder zapcore.ObjectEncoder) error { encoder.AddObject("first", &ap.Messages[0].InnerMsg) encoder.AddObject("second", &ap.Messages[1].InnerMsg) @@ -211,8 +207,6 @@ type BallotProof struct { Messages [2]BallotProofMsg } -func (bp *BallotProof) isProof() {} - func (bp *BallotProof) MarshalLogObject(encoder zapcore.ObjectEncoder) error { encoder.AddObject("first", &bp.Messages[0].InnerMsg) encoder.AddObject("second", &bp.Messages[1].InnerMsg) @@ -223,8 +217,6 @@ type HareProof struct { Messages [2]HareProofMsg } -func (hp *HareProof) isProof() {} - func (hp *HareProof) MarshalLogObject(encoder zapcore.ObjectEncoder) error { encoder.AddObject("first", &hp.Messages[0].InnerMsg) encoder.AddObject("second", &hp.Messages[1].InnerMsg) @@ -260,8 +252,6 @@ type InvalidPostIndexProof struct { InvalidIdx uint32 } -func (p *InvalidPostIndexProof) isProof() {} - type BallotProofMsg struct { InnerMsg types.BallotMetadata @@ -322,8 +312,6 @@ type InvalidPrevATXProof struct { Atx2 wire.ActivationTxV1 } -func (p *InvalidPrevATXProof) isProof() {} - func MalfeasanceInfo(smesher types.NodeID, mp *MalfeasanceProof) string { var b strings.Builder b.WriteString(fmt.Sprintf("generate layer: %v\n", mp.Layer)) diff --git a/mesh/malfeasance.go b/mesh/malfeasance.go index ad3f090e2a..fc074aa221 100644 --- a/mesh/malfeasance.go +++ b/mesh/malfeasance.go @@ -50,6 +50,19 @@ func NewMalfeasanceHandler( return mh } +func (mh *MalfeasanceHandler) Info(data wire.ProofData) (map[string]string, error) { + bp, ok := data.(*wire.BallotProof) + if !ok { + return nil, errors.New("wrong message type for multi ballots") + } + return map[string]string{ + "msg1": bp.Messages[0].InnerMsg.MsgHash.String(), + "msg2": bp.Messages[1].InnerMsg.MsgHash.String(), + "layer": bp.Messages[0].InnerMsg.Layer.String(), + "smesher_id": bp.Messages[0].SmesherID.String(), + }, nil +} + func (mh *MalfeasanceHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { bp, ok := data.(*wire.BallotProof) if !ok { diff --git a/node/flags/string_to_uint64_test.go b/node/flags/string_to_uint64_test.go index cac3d11903..935c662694 100644 --- a/node/flags/string_to_uint64_test.go +++ b/node/flags/string_to_uint64_test.go @@ -53,8 +53,7 @@ func TestStringToUint64Value(t *testing.T) { full += arg + "," err := parser.Set(arg) if len(tc.err) > 0 { - require.Error(t, err) - require.Contains(t, err.Error(), tc.err) + require.ErrorContains(t, err, tc.err) } else { require.NoError(t, err) } @@ -67,8 +66,7 @@ func TestStringToUint64Value(t *testing.T) { require.Equal(t, tc.expected, value) require.Equal(t, tc.expected, valFull) } else { - require.Error(t, err) - require.Contains(t, err.Error(), tc.err) + require.ErrorContains(t, err, tc.err) } }) } diff --git a/node/node.go b/node/node.go index efd4f84110..3c66b0dee5 100644 --- a/node/node.go +++ b/node/node.go @@ -370,52 +370,53 @@ func New(opts ...Option) *App { // App is the cli app singleton. type App struct { *cobra.Command - fileLock *flock.Flock - signers []*signing.EdSigner - Config *config.Config - db sql.StateDatabase - cachedDB *datastore.CachedDB - dbMetrics *dbmetrics.DBMetricsCollector - localDB sql.LocalDatabase - grpcPublicServer *grpcserver.Server - grpcPrivateServer *grpcserver.Server - grpcPostServer *grpcserver.Server - grpcTLSServer *grpcserver.Server - jsonAPIServer *grpcserver.JSONHTTPServer - grpcServices map[grpcserver.Service]grpcserver.ServiceAPI - pprofService *http.Server - profilerService *pyroscope.Profiler - syncer *syncer.Syncer - proposalListener *proposals.Handler - proposalBuilder *miner.ProposalBuilder - mesh *mesh.Mesh - atxsdata *atxsdata.Data - clock *timesync.NodeClock - hare3 *hare3.Hare - hare4 *hare4.Hare - hareResultsChan chan hare4.ConsensusOutput - hOracle *eligibility.Oracle - blockGen *blocks.Generator - certifier *blocks.Certifier - atxBuilder *activation.Builder - nipostBuilder *activation.NIPostBuilder - atxHandler *activation.Handler - txHandler *txs.TxHandler - validator *activation.Validator - edVerifier *signing.EdVerifier - beaconProtocol *beacon.ProtocolDriver - log log.Log - syncLogger log.Log - svm *vm.VM - conState *txs.ConservativeState - fetcher *fetch.Fetch - ptimesync *peersync.Sync - tortoise *tortoise.Tortoise - updater *bootstrap.Updater - poetDb *activation.PoetDb - postVerifier activation.PostVerifier - postSupervisor *activation.PostSupervisor - errCh chan error + fileLock *flock.Flock + signers []*signing.EdSigner + Config *config.Config + db sql.StateDatabase + cachedDB *datastore.CachedDB + dbMetrics *dbmetrics.DBMetricsCollector + localDB sql.LocalDatabase + grpcPublicServer *grpcserver.Server + grpcPrivateServer *grpcserver.Server + grpcPostServer *grpcserver.Server + grpcTLSServer *grpcserver.Server + jsonAPIServer *grpcserver.JSONHTTPServer + grpcServices map[grpcserver.Service]grpcserver.ServiceAPI + pprofService *http.Server + profilerService *pyroscope.Profiler + syncer *syncer.Syncer + proposalListener *proposals.Handler + proposalBuilder *miner.ProposalBuilder + mesh *mesh.Mesh + atxsdata *atxsdata.Data + clock *timesync.NodeClock + hare3 *hare3.Hare + hare4 *hare4.Hare + hareResultsChan chan hare4.ConsensusOutput + hOracle *eligibility.Oracle + blockGen *blocks.Generator + certifier *blocks.Certifier + atxBuilder *activation.Builder + nipostBuilder *activation.NIPostBuilder + atxHandler *activation.Handler + txHandler *txs.TxHandler + validator *activation.Validator + edVerifier *signing.EdVerifier + beaconProtocol *beacon.ProtocolDriver + log log.Log + syncLogger log.Log + svm *vm.VM + conState *txs.ConservativeState + fetcher *fetch.Fetch + ptimesync *peersync.Sync + tortoise *tortoise.Tortoise + updater *bootstrap.Updater + poetDb *activation.PoetDb + postVerifier activation.PostVerifier + postSupervisor *activation.PostSupervisor + malfeasanceHandler *malfeasance.Handler + errCh chan error host *p2p.Host @@ -1143,18 +1144,18 @@ func (app *App) initServices(ctx context.Context) error { for _, s := range app.signers { nodeIDs = append(nodeIDs, s.NodeID()) } - malfeasanceHandler := malfeasance.NewHandler( + app.malfeasanceHandler = malfeasance.NewHandler( app.cachedDB, malfeasanceLogger, app.host.ID(), nodeIDs, trtl, ) - malfeasanceHandler.RegisterHandlerV1(malfeasance.MultipleATXs, activationMH) - malfeasanceHandler.RegisterHandlerV1(malfeasance.MultipleBallots, meshMH) - malfeasanceHandler.RegisterHandlerV1(malfeasance.HareEquivocation, hareMH) - malfeasanceHandler.RegisterHandlerV1(malfeasance.InvalidPostIndex, invalidPostMH) - malfeasanceHandler.RegisterHandlerV1(malfeasance.InvalidPrevATX, invalidPrevMH) + app.malfeasanceHandler.RegisterHandler(malfeasance.MultipleATXs, activationMH) + app.malfeasanceHandler.RegisterHandler(malfeasance.MultipleBallots, meshMH) + app.malfeasanceHandler.RegisterHandler(malfeasance.HareEquivocation, hareMH) + app.malfeasanceHandler.RegisterHandler(malfeasance.InvalidPostIndex, invalidPostMH) + app.malfeasanceHandler.RegisterHandler(malfeasance.InvalidPrevATX, invalidPrevMH) fetcher.SetValidators( fetch.ValidatorFunc( @@ -1199,7 +1200,7 @@ func (app *App) initServices(ctx context.Context) error { ), fetch.ValidatorFunc( pubsub.DropPeerOnSyncValidationReject( - malfeasanceHandler.HandleSyncedMalfeasanceProof, + app.malfeasanceHandler.HandleSyncedMalfeasanceProof, app.host, lg.Zap(), ), @@ -1260,7 +1261,7 @@ func (app *App) initServices(ctx context.Context) error { ) app.host.Register( pubsub.MalfeasanceProof, - pubsub.ChainGossipHandler(atxSyncHandler, malfeasanceHandler.HandleMalfeasanceProof), + pubsub.ChainGossipHandler(atxSyncHandler, app.malfeasanceHandler.HandleMalfeasanceProof), ) app.proposalBuilder = proposalBuilder @@ -1558,10 +1559,19 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv service := v2alpha1.NewRewardStreamService(app.db) app.grpcServices[svc] = service return service, nil + case v2alpha1.Malfeasance: + service := v2alpha1.NewMalfeasanceService(app.db, app.malfeasanceHandler) + app.grpcServices[svc] = service + return service, nil + case v2alpha1.MalfeasanceStream: + service := v2alpha1.NewMalfeasanceStreamService(app.db, app.malfeasanceHandler) + app.grpcServices[svc] = service + return service, nil case v2alpha1.Network: service := v2alpha1.NewNetworkService( app.clock.GenesisTime(), - app.Config) + app.Config, + ) app.grpcServices[svc] = service return service, nil case v2alpha1.Node: diff --git a/proposals/handler.go b/proposals/handler.go index c1bac83869..c5729dc357 100644 --- a/proposals/handler.go +++ b/proposals/handler.go @@ -490,7 +490,7 @@ func (h *Handler) checkBallotSyntacticValidity(ctx context.Context, b *types.Bal decoded, err := h.tortoise.DecodeBallot(b.ToTortoiseData()) if err != nil { return nil, fmt.Errorf( - "%w: failed to decode ballot id %s. %v", + "%w: failed to decode ballot id %s: %v", fetch.ErrIgnore, b.ID().AsHash32().ShortString(), err, diff --git a/proposals/handler_test.go b/proposals/handler_test.go index 8a466fba35..9d3208f74c 100644 --- a/proposals/handler_test.go +++ b/proposals/handler_test.go @@ -808,7 +808,7 @@ func TestBallot_DecodeBeforeVotesConsistency(t *testing.T) { th.md.EXPECT().DecodeBallot(decoded.BallotTortoiseData).Return(decoded, expected) err := th.HandleSyncedBallot(context.Background(), b.ID().AsHash32(), peer, data) require.ErrorIs(t, err, fetch.ErrIgnore) - require.Contains(t, err.Error(), expected.Error()) + require.ErrorContains(t, err, expected.Error()) } func TestBallot_DecodedStoreFailure(t *testing.T) { diff --git a/sql/atxs/atxs.go b/sql/atxs/atxs.go index a94f3afa73..21b3ed0815 100644 --- a/sql/atxs/atxs.go +++ b/sql/atxs/atxs.go @@ -780,7 +780,8 @@ func IterateAtxsOps( _, err := db.Exec( fullQuery+builder.FilterFrom(operations), builder.BindingsFrom(operations), - decoder(fn)) + decoder(fn), + ) return err } diff --git a/sql/builder/builder.go b/sql/builder/builder.go index d7342ed727..4af899b3c7 100644 --- a/sql/builder/builder.go +++ b/sql/builder/builder.go @@ -11,13 +11,14 @@ import ( type token string const ( - Eq token = "=" - NotEq token = "!=" - Gt token = ">" - Gte token = ">=" - Lt token = "<" - Lte token = "<=" - In token = "in" + Eq token = "=" + NotEq token = "!=" + Gt token = ">" + Gte token = ">=" + Lt token = "<" + Lte token = "<=" + In token = "in" + IsNotNull token = "is not null" ) type operator string @@ -37,6 +38,7 @@ const ( Layer field = "layer" Address field = "address" Principal field = "principal" + Proof field = "proof" ) type modifier string @@ -135,22 +137,26 @@ func FilterFrom(operations Operations) string { } } queryBuilder.WriteString(" )") - } else { - if op.Token == In { - values, ok := op.Value.([][]byte) - if !ok { - panic("value for 'In' token must be a slice of []byte") - } - params := make([]string, len(values)) - for j := range values { - params[j] = fmt.Sprintf("?%d", bindIndex) - bindIndex++ - } - fmt.Fprintf(&queryBuilder, " %s%s %s (%s)", op.Prefix, op.Field, op.Token, strings.Join(params, ", ")) - } else { - fmt.Fprintf(&queryBuilder, " %s%s %s ?%d", op.Prefix, op.Field, op.Token, bindIndex) + continue + } + + switch op.Token { + case In: + values, ok := op.Value.([][]byte) + if !ok { + panic("value for 'In' token must be a slice of []byte") + } + params := make([]string, len(values)) + for j := range values { + params[j] = fmt.Sprintf("?%d", bindIndex) bindIndex++ } + fmt.Fprintf(&queryBuilder, " %s%s %s (%s)", op.Prefix, op.Field, op.Token, strings.Join(params, ", ")) + case IsNotNull: + fmt.Fprintf(&queryBuilder, " %s%s %s", op.Prefix, op.Field, op.Token) + default: + fmt.Fprintf(&queryBuilder, " %s%s %s ?%d", op.Prefix, op.Field, op.Token, bindIndex) + bindIndex++ } } @@ -191,6 +197,8 @@ func bindValue(stmt *sql.Statement, bindIndex int, value any) int { stmt.BindBytes(bindIndex, v) bindIndex++ } + case nil: + // do nothing default: panic(fmt.Sprintf("unexpected type %T", value)) } diff --git a/sql/builder/builder_test.go b/sql/builder/builder_test.go index 74988bb802..11a654ba8c 100644 --- a/sql/builder/builder_test.go +++ b/sql/builder/builder_test.go @@ -3,6 +3,8 @@ package builder import ( "testing" + "github.com/stretchr/testify/require" + "github.com/spacemeshos/go-spacemesh/common/types" ) @@ -16,10 +18,7 @@ func TestFilterFrom_WithSingleFilter(t *testing.T) { expected := " where epoch = ?1" actual := FilterFrom(operations) - - if actual != expected { - t.Errorf("Expected '%s', but got '%s'", expected, actual) - } + require.Equal(t, expected, actual) } func TestFilterFrom_WithMultipleFilters(t *testing.T) { @@ -33,10 +32,7 @@ func TestFilterFrom_WithMultipleFilters(t *testing.T) { expected := " where epoch = ?1 and pubkey = ?2" actual := FilterFrom(operations) - - if actual != expected { - t.Errorf("Expected '%s', but got '%s'", expected, actual) - } + require.Equal(t, expected, actual) } func TestFilterFrom_WithGroupFilters(t *testing.T) { @@ -55,10 +51,7 @@ func TestFilterFrom_WithGroupFilters(t *testing.T) { expected := " where ( epoch = ?1 and pubkey = ?2 )" actual := FilterFrom(operations) - - if actual != expected { - t.Errorf("Expected '%s', but got '%s'", expected, actual) - } + require.Equal(t, expected, actual) } func TestFilterFrom_WithInToken(t *testing.T) { @@ -71,10 +64,7 @@ func TestFilterFrom_WithInToken(t *testing.T) { expected := " where epoch in (?1, ?2)" actual := FilterFrom(operations) - - if actual != expected { - t.Errorf("Expected '%s', but got '%s'", expected, actual) - } + require.Equal(t, expected, actual) } func TestFilterFrom_WithModifiers(t *testing.T) { @@ -91,8 +81,19 @@ func TestFilterFrom_WithModifiers(t *testing.T) { expected := " where epoch = ?1 order by epoch limit 10" actual := FilterFrom(operations) + require.Equal(t, expected, actual) +} - if actual != expected { - t.Errorf("Expected '%s', but got '%s'", expected, actual) +func TestFilterFrom_NotNull(t *testing.T) { + t.Parallel() + operations := Operations{ + Filter: []Op{ + {Field: Proof, Token: IsNotNull}, + {Field: Id, Token: Eq, Value: 1}, + }, } + + expected := " where proof is not null and id = ?1" + actual := FilterFrom(operations) + require.Equal(t, expected, actual) } diff --git a/sql/database_test.go b/sql/database_test.go index 0104c08813..4b528d704f 100644 --- a/sql/database_test.go +++ b/sql/database_test.go @@ -563,7 +563,7 @@ func TestSchemaDrift(t *testing.T) { WithLogger(logger), ) require.Error(t, err) - require.Contains(t, err.Error(), "newtbl") + require.ErrorContains(t, err, "newtbl") require.Equal(t, 0, observedLogs.Len(), "expected 0 log messages") db, err = Open("file:"+dbFile, diff --git a/sql/identities/identities.go b/sql/identities/identities.go index 257bec03ee..df34f50296 100644 --- a/sql/identities/identities.go +++ b/sql/identities/identities.go @@ -9,6 +9,7 @@ import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" ) // SetMalicious records identity as malicious. @@ -62,6 +63,26 @@ func LoadMalfeasanceBlob(_ context.Context, db sql.Executor, nodeID []byte, blob return err } +func IterateMaliciousOps( + db sql.Executor, + operations builder.Operations, + fn func(types.NodeID, []byte, time.Time) bool, +) error { + _, err := db.Exec( + "select pubkey, proof, received from identities"+builder.FilterFrom(operations), + builder.BindingsFrom(operations), + func(stmt *sql.Statement) bool { + var id types.NodeID + stmt.ColumnBytes(0, id[:]) + proof := make([]byte, stmt.ColumnLen(1)) + stmt.ColumnBytes(1, proof) + received := time.Unix(0, stmt.ColumnInt64(2)) + return fn(id, proof, received) + }, + ) + return err +} + // IterateMalicious invokes the specified callback for each malicious node ID. // It stops if the callback returns an error. func IterateMalicious( diff --git a/sql/identities/identities_test.go b/sql/identities/identities_test.go index 555a9be270..44f3001673 100644 --- a/sql/identities/identities_test.go +++ b/sql/identities/identities_test.go @@ -11,6 +11,7 @@ import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/malfeasance/wire" "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) @@ -302,3 +303,96 @@ func TestEquivocationSetByMarriageATX(t *testing.T) { require.Empty(t, set) }) } + +func Test_IterateMaliciousOps(t *testing.T) { + db := statesql.InMemory() + tt := []struct { + id types.NodeID + proof []byte + }{ + { + types.RandomNodeID(), + types.RandomBytes(11), + }, + { + types.RandomNodeID(), + types.RandomBytes(11), + }, + { + types.RandomNodeID(), + types.RandomBytes(11), + }, + } + + for _, tc := range tt { + err := identities.SetMalicious(db, tc.id, tc.proof, time.Now()) + require.NoError(t, err) + } + + var got []struct { + id types.NodeID + proof []byte + } + err := identities.IterateMaliciousOps(db, builder.Operations{}, + func(id types.NodeID, proof []byte, _ time.Time) bool { + got = append(got, struct { + id types.NodeID + proof []byte + }{id, proof}) + return true + }) + require.NoError(t, err) + require.ElementsMatch(t, tt, got) +} + +func Test_IterateMaliciousOpsWithFilter(t *testing.T) { + db := statesql.InMemory() + tt := []struct { + id types.NodeID + proof []byte + }{ + { + types.RandomNodeID(), + types.RandomBytes(11), + }, + { + types.RandomNodeID(), + nil, + }, + { + types.RandomNodeID(), + types.RandomBytes(11), + }, + } + + for _, tc := range tt { + err := identities.SetMalicious(db, tc.id, tc.proof, time.Now()) + require.NoError(t, err) + } + + var got []struct { + id types.NodeID + proof []byte + } + ops := builder.Operations{} + ops.Filter = append(ops.Filter, builder.Op{ + Field: builder.Smesher, + Token: builder.In, + Value: [][]byte{tt[0].id.Bytes(), tt[1].id.Bytes()}, // first two ids + }) + ops.Filter = append(ops.Filter, builder.Op{ + Field: builder.Proof, + Token: builder.IsNotNull, // only entries which have a proof + }) + + err := identities.IterateMaliciousOps(db, ops, func(id types.NodeID, proof []byte, _ time.Time) bool { + got = append(got, struct { + id types.NodeID + proof []byte + }{id, proof}) + return true + }) + require.NoError(t, err) + // only the first element should be in the result + require.ElementsMatch(t, tt[:1], got) +} diff --git a/syncer/malsync/syncer.go b/syncer/malsync/syncer.go index 633e4a284a..f35e2175cb 100644 --- a/syncer/malsync/syncer.go +++ b/syncer/malsync/syncer.go @@ -283,7 +283,7 @@ func (s *Syncer) downloadNodeIDs(ctx context.Context, initial bool, updates chan case <-ctx.Done(): return nil // TODO(ivan4th) this has to be randomized in a followup - // when sync will be schedulled in advance, in order to smooth out request rate across the network + // when sync will be scheduled in advance, in order to smooth out request rate across the network case <-s.clock.After(interval): } } From 3b977d27082bc81296b9867c400bdb68935035a9 Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Mon, 30 Sep 2024 11:13:21 +0000 Subject: [PATCH 14/73] v2alpha1: Add template address to account service (#6357) Add a template address to the account service to determine the type of account and whether it is spawned or not. --- api/grpcserver/v2alpha1/account.go | 3 ++- api/grpcserver/v2alpha1/account_test.go | 28 +++++++++++++++++++++---- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/api/grpcserver/v2alpha1/account.go b/api/grpcserver/v2alpha1/account.go index 3bc9a30493..347606630e 100644 --- a/api/grpcserver/v2alpha1/account.go +++ b/api/grpcserver/v2alpha1/account.go @@ -68,7 +68,8 @@ func (s *AccountService) List( if err := accounts.IterateAccountsOps(s.db, ops, func(account *types.Account) bool { counterProjected, balanceProjected := s.conState.GetProjection(account.Address) rst = append(rst, &spacemeshv2alpha1.Account{ - Address: account.Address.String(), + Address: account.Address.String(), + Template: account.TemplateAddress.String(), Current: &spacemeshv2alpha1.AccountState{ Counter: account.NextNonce, Balance: account.Balance, diff --git a/api/grpcserver/v2alpha1/account_test.go b/api/grpcserver/v2alpha1/account_test.go index 29037ba138..e3a1eb2d97 100644 --- a/api/grpcserver/v2alpha1/account_test.go +++ b/api/grpcserver/v2alpha1/account_test.go @@ -14,12 +14,15 @@ import ( "google.golang.org/grpc/status" "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/genvm/templates/multisig" + "github.com/spacemeshos/go-spacemesh/genvm/templates/wallet" "github.com/spacemeshos/go-spacemesh/sql/accounts" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) type testAccount struct { Address types.Address + TemplateAddress types.Address BalanceCurrent uint64 BalanceProjected uint64 CounterCurrent uint64 @@ -37,8 +40,14 @@ func TestAccountService_List(t *testing.T) { addr := types.Address{} binary.BigEndian.PutUint64(addr[:], uint64(i)) + template := wallet.TemplateAddress + if (i % 2) == 0 { + template = multisig.TemplateAddress + } + accs[i] = testAccount{ Address: addr, + TemplateAddress: template, BalanceCurrent: uint64(1 + i), BalanceProjected: uint64(100 + i), CounterCurrent: uint64(1000 + i), @@ -46,10 +55,11 @@ func TestAccountService_List(t *testing.T) { } require.NoError(t, accounts.Update(db, &types.Account{ - Layer: 1, - Address: addr, - NextNonce: accs[i].CounterCurrent, - Balance: accs[i].BalanceCurrent, + Layer: 1, + Address: addr, + TemplateAddress: &template, + NextNonce: accs[i].CounterCurrent, + Balance: accs[i].BalanceCurrent, })) } @@ -134,4 +144,14 @@ func TestAccountService_List(t *testing.T) { require.Equal(t, accs[1].BalanceCurrent, list.Accounts[1].Current.Balance) require.Equal(t, accs[1].CounterCurrent, list.Accounts[1].Current.Counter) }) + + t.Run("template address", func(t *testing.T) { + list, err := client.List(ctx, &spacemeshv2alpha1.AccountRequest{ + Addresses: []string{accs[0].Address.String()}, + Limit: 10, + }) + require.NoError(t, err) + require.Len(t, list.Accounts, 1) + require.Equal(t, accs[0].TemplateAddress.String(), list.Accounts[0].Template) + }) } diff --git a/go.mod b/go.mod index 95a0a5e25b..78c0f83c2e 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/seehuhn/mt19937 v1.0.0 github.com/slok/go-http-metrics v0.12.0 - github.com/spacemeshos/api/release/go v1.53.0 + github.com/spacemeshos/api/release/go v1.54.0 github.com/spacemeshos/economics v0.1.3 github.com/spacemeshos/fixed v0.1.1 github.com/spacemeshos/go-scale v1.2.0 diff --git a/go.sum b/go.sum index a1de10a212..0c104bdb00 100644 --- a/go.sum +++ b/go.sum @@ -603,8 +603,8 @@ github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:Udh github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemeshos/api/release/go v1.53.0 h1:NGPCPNMwkQtPgx2P/bmhvUdGFyv78UMSTGYvkj1JIlo= -github.com/spacemeshos/api/release/go v1.53.0/go.mod h1:nIWzRxJe365XvjN51AhfwR6Lf0EDaMcnmAb6hd2D0xw= +github.com/spacemeshos/api/release/go v1.54.0 h1:P5bqTwrFUoHBodYvYKhJ5pYhHU5o7afdVo1a4IYlRng= +github.com/spacemeshos/api/release/go v1.54.0/go.mod h1:nIWzRxJe365XvjN51AhfwR6Lf0EDaMcnmAb6hd2D0xw= github.com/spacemeshos/economics v0.1.3 h1:ACkq3mTebIky4Zwbs9SeSSRZrUCjU/Zk0wq9Z0BTh2A= github.com/spacemeshos/economics v0.1.3/go.mod h1:FH7u0FzTIm6Kpk+X5HOZDvpkgNYBKclmH86rVwYaDAo= github.com/spacemeshos/fixed v0.1.1 h1:N1y4SUpq1EV+IdJrWJwUCt1oBFzeru/VKVcBsvPc2Fk= From 6e4a2f5fdcb72ebc55912362d82f2c938f51811e Mon Sep 17 00:00:00 2001 From: acud <12988138+acud@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:06:28 +0000 Subject: [PATCH 15/73] feat: batch ballots (#6289) ## Motivation Batches ballots to be written together into the db, reducing the amount of time we spend writing ballots to the db. --- CHANGELOG.md | 11 ++ mesh/ballotwriter/ballotwriter.go | 170 +++++++++++++++++++ mesh/ballotwriter/ballotwriter_test.go | 223 +++++++++++++++++++++++++ mesh/ballotwriter/metrics.go | 66 ++++++++ mesh/mesh.go | 85 ++++------ mesh/mesh_test.go | 11 +- mesh/metrics/prometheus.go | 18 +- metrics/common.go | 17 +- node/node.go | 5 + 9 files changed, 550 insertions(+), 56 deletions(-) create mode 100644 mesh/ballotwriter/ballotwriter.go create mode 100644 mesh/ballotwriter/ballotwriter_test.go create mode 100644 mesh/ballotwriter/metrics.go diff --git a/CHANGELOG.md b/CHANGELOG.md index b5518306a4..a31f2d5169 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ See [RELEASE](./RELEASE.md) for workflow instructions. +## v1.7.2 + +### Highlights + +### Features + +### Improvements + +* [#6289](https://github.com/spacemeshos/go-spacemesh/pull/6289) Added write coalescing for ballots, reducing the + amount of time and CPU we're spending on writing ballots. + ## v1.7.0 ### Upgrade information diff --git a/mesh/ballotwriter/ballotwriter.go b/mesh/ballotwriter/ballotwriter.go new file mode 100644 index 0000000000..1252be9cfc --- /dev/null +++ b/mesh/ballotwriter/ballotwriter.go @@ -0,0 +1,170 @@ +package ballotwriter + +import ( + "context" + "errors" + "fmt" + "sync" + "time" + + "go.uber.org/zap" + + "github.com/spacemeshos/go-spacemesh/codec" + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/ballots" + "github.com/spacemeshos/go-spacemesh/sql/identities" +) + +var writerDelay = 100 * time.Millisecond + +type BallotWriter struct { + db db + logger *zap.Logger + + atxMu sync.Mutex + timer *time.Ticker + + ballotBatch map[types.BallotID]*types.Ballot // the current + ballotBatchResult *batchResult +} + +func New(db db, logger *zap.Logger) *BallotWriter { + // create a stopped ticker that can be started later + timer := time.NewTicker(writerDelay) + timer.Stop() + writer := &BallotWriter{ + db: db, + logger: logger, + timer: timer, + ballotBatchResult: &batchResult{ + doneC: make(chan struct{}), + }, + ballotBatch: make(map[types.BallotID]*types.Ballot), + } + return writer +} + +// Start the forever-loop that flushes the ballots to the DB +// at-least every `writerDelay`. The caller is responsible +// to call Start in a different goroutine. +func (w *BallotWriter) Start(ctx context.Context) { + w.timer.Reset(writerDelay) + for { + select { + case <-ctx.Done(): + w.atxMu.Lock() + w.ballotBatchResult.err = ctx.Err() + close(w.ballotBatchResult.doneC) + w.atxMu.Unlock() + + return + case <-w.timer.C: + // we hang on to this lock for the entire duration of this select case branch + // as it simplifies the business logic. + w.atxMu.Lock() + startTime := time.Now() + if len(w.ballotBatch) == 0 { + w.atxMu.Unlock() + continue + } + batch := w.ballotBatch + res := w.ballotBatchResult // copy the result type + BatchWriteCount.Inc() + FlushBatchSize.Add(float64(len(batch))) + + var ballotAddDur, layerBallotDur time.Duration + // we use a context.Background() because: on shutdown the canceling of the + // context may exit the transaction halfway and leave the db in some state where it + // causes crawshaw to panic on a "not all connections returned to pool". + if err := w.db.WithTx(context.Background(), func(tx sql.Transaction) error { + for _, ballot := range batch { + if !ballot.IsMalicious() { + layerBallotStart := time.Now() + prev, err := ballots.LayerBallotByNodeID(tx, ballot.Layer, ballot.SmesherID) + if err != nil && !errors.Is(err, sql.ErrNotFound) { + return err + } + layerBallotDur += time.Since(layerBallotStart) + + if prev != nil && prev.ID() != ballot.ID() { + var ballotProof wire.BallotProof + for i, b := range []*types.Ballot{prev, ballot} { + ballotProof.Messages[i] = wire.BallotProofMsg{ + InnerMsg: types.BallotMetadata{ + Layer: b.Layer, + MsgHash: types.BytesToHash(b.HashInnerBytes()), + }, + Signature: b.Signature, + SmesherID: b.SmesherID, + } + } + proof := &wire.MalfeasanceProof{ + Layer: ballot.Layer, + Proof: wire.Proof{ + Type: wire.MultipleBallots, + Data: &ballotProof, + }, + } + encoded := codec.MustEncode(proof) + if err := identities.SetMalicious(tx, ballot.SmesherID, encoded, time.Now()); err != nil { + return fmt.Errorf("add malfeasance proof: %w", err) + } + ballot.SetMalicious() + w.logger.Warn("smesher produced more than one ballot in the same layer", + zap.Stringer("smesher", ballot.SmesherID), + zap.Object("prev", prev), + zap.Object("curr", ballot), + ) + } + } + ballotAddStart := time.Now() + if err := ballots.Add(tx, ballot); err != nil && !errors.Is(err, sql.ErrObjectExists) { + return err + } + ballotAddDur += time.Since(ballotAddStart) + } + return nil + }); err != nil { + res.err = err + ErroredBatchCount.Inc() + w.logger.Error("flush ballots to db", zap.Error(err)) + } + cleanupStart := time.Now() + w.ballotBatchResult = &batchResult{doneC: make(chan struct{})} + clear(w.ballotBatch) + w.atxMu.Unlock() + writeTime := time.Since(startTime) + WriteTime.Add(float64(writeTime)) + WriteTimeHist.Observe(writeTime.Seconds()) + LayerBallotTime.Add(float64(layerBallotDur)) + BallotAddTime.Add(float64(ballotAddDur)) + CleanupTime.Add(float64(time.Since(cleanupStart))) + close(res.doneC) + } + } +} + +// Store a ballot. Will return the error encountered during the +// write to the db. May also return a context canceled error during +// shutdown. +func (w *BallotWriter) Store(b *types.Ballot) error { + w.atxMu.Lock() + br := w.ballotBatchResult + w.ballotBatch[b.ID()] = b + w.atxMu.Unlock() + + <-br.doneC + return br.err +} + +type batchResult struct { + doneC chan struct{} + err error +} + +type db interface { + WithTx(context.Context, func(sql.Transaction) error) error + sql.Executor +} diff --git a/mesh/ballotwriter/ballotwriter_test.go b/mesh/ballotwriter/ballotwriter_test.go new file mode 100644 index 0000000000..aeb742c68d --- /dev/null +++ b/mesh/ballotwriter/ballotwriter_test.go @@ -0,0 +1,223 @@ +package ballotwriter_test + +import ( + "context" + "errors" + "fmt" + "path/filepath" + "testing" + "time" + + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + + "github.com/spacemeshos/go-spacemesh/codec" + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/mesh/ballotwriter" + "github.com/spacemeshos/go-spacemesh/signing" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/ballots" + "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/statesql" + "github.com/spacemeshos/go-spacemesh/sql/statesql/migrations" +) + +func init() { + // otherwise we get a divide by zero error + types.SetLayersPerEpoch(1) +} + +var testLayer = types.LayerID(5) + +func TestWriteCoalesce_One(t *testing.T) { + w, db := newTestBallotWriter(t) + ballot := genBallot(t) + err := w.Store(ballot) + require.NoError(t, err) + has, err := ballots.Has(db, ballot.ID()) + require.True(t, has) + require.NoError(t, err) +} + +// TestWriteCoalesce_TwoPerSmesher tests that we accept two ballots +// for a smesher (and makes sure that the malfeasance circuit works). +func TestWriteCoalesce_OnePerSmesher(t *testing.T) { + w, db := newTestBallotWriter(t) + b := types.RandomBallot() + b1 := types.RandomBallot() + b.Layer = testLayer + b1.Layer = testLayer + sig, err := signing.NewEdSigner() + require.NoError(t, err) + b.Signature = sig.Sign(signing.BALLOT, b.SignedBytes()) + b1.Signature = sig.Sign(signing.BALLOT, b.SignedBytes()) + b.SmesherID = sig.NodeID() + b1.SmesherID = sig.NodeID() + require.NoError(t, b.Initialize()) + require.NoError(t, b1.Initialize()) + err = w.Store(b) + require.NoError(t, err) + err = w.Store(b1) + require.NoError(t, err) + has, err := ballots.Has(db, b.ID()) + require.True(t, has) + require.NoError(t, err) + has, err = ballots.Has(db, b1.ID()) + require.True(t, has) + require.NoError(t, err) + err = w.Store(b1) + require.NoError(t, err) + // check that a corresponding malfeasance proof has been stored + var blob sql.Blob + err = identities.LoadMalfeasanceBlob(context.Background(), db, b.SmesherID.Bytes(), &blob) + require.NoError(t, err) + require.NotNil(t, blob.Bytes) +} + +func BenchmarkWriteCoalesing(b *testing.B) { + a := make([]*types.Ballot, 100000) + for i := 0; i < len(a); i++ { + a[i] = genBallot(b) + } + writeFn := func(ballot *types.Ballot, tx sql.Transaction) error { + if !ballot.IsMalicious() { + prev, err := ballots.LayerBallotByNodeID(tx, ballot.Layer, ballot.SmesherID) + if err != nil && !errors.Is(err, sql.ErrNotFound) { + return err + } + if prev != nil && prev.ID() != ballot.ID() { + var ballotProof wire.BallotProof + for i, b := range []*types.Ballot{prev, ballot} { + ballotProof.Messages[i] = wire.BallotProofMsg{ + InnerMsg: types.BallotMetadata{ + Layer: b.Layer, + MsgHash: types.BytesToHash(b.HashInnerBytes()), + }, + Signature: b.Signature, + SmesherID: b.SmesherID, + } + } + proof := &wire.MalfeasanceProof{ + Layer: ballot.Layer, + Proof: wire.Proof{ + Type: wire.MultipleBallots, + Data: &ballotProof, + }, + } + encoded := codec.MustEncode(proof) + if err := identities.SetMalicious(tx, ballot.SmesherID, encoded, time.Now()); err != nil { + return fmt.Errorf("add malfeasance proof: %w", err) + } + ballot.SetMalicious() + } + } + if err := ballots.Add(tx, ballot); err != nil && !errors.Is(err, sql.ErrObjectExists) { + return err + } + + return nil + } + b.ResetTimer() + b.Run("No Coalesing", func(b *testing.B) { + db := newDiskSqlite(b) + b.ResetTimer() + for i := 0; i < b.N; i++ { + if err := db.WithTx(context.Background(), func(tx sql.Transaction) error { + if err := writeFn(a[i], tx); err != nil { + b.Fatal(err) + } + return nil + }); err != nil { + b.Fatal(err) + } + } + }) + + // with the coalesing tests, one must take the "ns/op" metrics and divide it + // by the number of entries written together to see how many items we're doing + // per time unit. + b.Run("Coalesing 1000 entries", func(b *testing.B) { + db := newDiskSqlite(b) + b.ResetTimer() + for j := 0; j < b.N; j++ { + if err := db.WithTx(context.Background(), func(tx sql.Transaction) error { + var err error + for i := (j * 1000); i < (j*1000)+1000; i++ { + if err = writeFn(a[i], tx); err != nil { + b.Fatal(err) + } + } + return nil + }); err != nil { + b.Fatal(err) + } + } + }) + + b.Run("Coalesing 5000 entries", func(b *testing.B) { + db := newDiskSqlite(b) + b.ResetTimer() + for j := 0; j < b.N; j++ { + if err := db.WithTx(context.Background(), func(tx sql.Transaction) error { + var err error + for i := (j * 5000); i < (j*5000)+5000; i++ { + if err = writeFn(a[i], tx); err != nil { + b.Fatal(err) + } + } + return nil + }); err != nil { + b.Fatal(err) + } + } + }) +} + +func genBallot(tb testing.TB) *types.Ballot { + b := types.RandomBallot() + + b.Layer = testLayer + sig, err := signing.NewEdSigner() + require.NoError(tb, err) + b.Signature = sig.Sign(signing.BALLOT, b.SignedBytes()) + b.SmesherID = sig.NodeID() + require.NoError(tb, b.Initialize()) + return b +} + +func newTestBallotWriter(t testing.TB) (*ballotwriter.BallotWriter, sql.Database) { + t.Helper() + db := statesql.InMemoryTest(t) + log := zaptest.NewLogger(t) + w := ballotwriter.New(db, log) + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + t.Cleanup(func() { + cancel() + <-done + }) + go func() { + defer close(done) + w.Start(ctx) + }() + return w, db +} + +func newDiskSqlite(tb testing.TB) sql.Database { + tb.Helper() + schema, err := migrations.SchemaWithInCodeMigrations() + require.NoError(tb, err) + + dbopts := []sql.Opt{ + sql.WithDatabaseSchema(schema), + sql.WithForceMigrations(true), + } + dir := tb.TempDir() + sqlDB, err := sql.Open("file:"+filepath.Join(dir, "sql.sql"), dbopts...) + if err != nil { + tb.Fatal(err) + } + tb.Cleanup(func() { sqlDB.Close() }) + return sqlDB +} diff --git a/mesh/ballotwriter/metrics.go b/mesh/ballotwriter/metrics.go new file mode 100644 index 0000000000..63ac72821e --- /dev/null +++ b/mesh/ballotwriter/metrics.go @@ -0,0 +1,66 @@ +package ballotwriter + +import ( + "github.com/prometheus/client_golang/prometheus" + + "github.com/spacemeshos/go-spacemesh/metrics" +) + +const ( + namespace = "ballotwriter" +) + +var BatchWriteCount = metrics.NewSimpleCounter( + namespace, + "batch_write_count", + "number of errors when writing a batch", +) + +var WriteBatchErrorsCount = metrics.NewSimpleCounter( + namespace, + "write_batch_errors", + "number of errors when writing a batch", +) + +var ErroredBatchCount = metrics.NewSimpleCounter( + namespace, + "errored_batch", + "number of batches that errored", +) + +var FlushBatchSize = metrics.NewSimpleCounter( + namespace, + "flush_batch_size", + "size of flushed batch", +) + +var LayerBallotTime = metrics.NewSimpleCounter( + namespace, + "layer_ballot_time", + "time spent getting layer-ballot by node id (under lock)", +) + +var BallotAddTime = metrics.NewSimpleCounter( + namespace, + "ballot_add_time", + "time spent in ballots.Add (under lock)", +) + +var CleanupTime = metrics.NewSimpleCounter( + namespace, + "cleanup_time", + "time spent in final cleanup(under lock)", +) + +var WriteTime = metrics.NewSimpleCounter( + namespace, + "batch_write_time", + "time spent writing data to db (under lock)", +) + +var WriteTimeHist = metrics.NewSimpleHistogram( + "write_time_hist", + namespace, + "observed time (in seconds) for writing a ballot", + prometheus.ExponentialBuckets(0.01, 10, 5), +) diff --git a/mesh/mesh.go b/mesh/mesh.go index 4f5785776d..d0e3c76842 100644 --- a/mesh/mesh.go +++ b/mesh/mesh.go @@ -23,6 +23,8 @@ import ( "github.com/spacemeshos/go-spacemesh/hash" "github.com/spacemeshos/go-spacemesh/log" "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/mesh/ballotwriter" + "github.com/spacemeshos/go-spacemesh/mesh/metrics" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/ballots" "github.com/spacemeshos/go-spacemesh/sql/blocks" @@ -55,6 +57,8 @@ type Mesh struct { processedLayer atomic.Value nextProcessedLayers map[types.LayerID]struct{} maxProcessedLayer types.LayerID + + ballotWriter *ballotwriter.BallotWriter } // NewMesh creates a new instant of a mesh. @@ -77,6 +81,7 @@ func NewMesh( conState: state, nextProcessedLayers: make(map[types.LayerID]struct{}), missingBlocks: make(chan []types.BlockID, 32), + ballotWriter: ballotwriter.New(db, logger), } msh.latestLayer.Store(types.LayerID(0)) msh.latestLayerInState.Store(types.LayerID(0)) @@ -114,6 +119,10 @@ func NewMesh( return msh, nil } +func (m *Mesh) Start(ctx context.Context) { + m.ballotWriter.Start(ctx) +} + func (msh *Mesh) recoverFromDB(latest types.LayerID) { msh.setLatestLayer(latest) @@ -551,63 +560,37 @@ func (msh *Mesh) AddBallot( ctx context.Context, ballot *types.Ballot, ) (*wire.MalfeasanceProof, error) { + var start time.Time malicious := msh.atxsdata.IsMalicious(ballot.SmesherID) if malicious { ballot.SetMalicious() } + start = time.Now() + err := msh.ballotWriter.Store(ballot) + if err != nil { + return nil, fmt.Errorf("batch store: %w", err) + } + metrics.BallotWaitWrite.Observe(time.Since(start).Seconds()) var proof *wire.MalfeasanceProof - // ballots.LayerBallotByNodeID and ballots.Add should be atomic - // otherwise concurrent ballots.Add from the same smesher may not be noticed - if err := msh.cdb.WithTx(ctx, func(dbtx sql.Transaction) error { - if !malicious { - prev, err := ballots.LayerBallotByNodeID(dbtx, ballot.Layer, ballot.SmesherID) - if err != nil && !errors.Is(err, sql.ErrNotFound) { - return err - } - if prev != nil && prev.ID() != ballot.ID() { - var ballotProof wire.BallotProof - for i, b := range []*types.Ballot{prev, ballot} { - ballotProof.Messages[i] = wire.BallotProofMsg{ - InnerMsg: types.BallotMetadata{ - Layer: b.Layer, - MsgHash: types.BytesToHash(b.HashInnerBytes()), - }, - Signature: b.Signature, - SmesherID: b.SmesherID, - } - } - proof = &wire.MalfeasanceProof{ - Layer: ballot.Layer, - Proof: wire.Proof{ - Type: wire.MultipleBallots, - Data: &ballotProof, - }, - } - encoded, err := codec.Encode(proof) - if err != nil { - msh.logger.Panic("failed to encode MalfeasanceProof", zap.Error(err)) - } - if err := identities.SetMalicious(dbtx, ballot.SmesherID, encoded, time.Now()); err != nil { - return fmt.Errorf("add malfeasance proof: %w", err) - } - ballot.SetMalicious() - msh.logger.Warn("smesher produced more than one ballot in the same layer", - zap.Stringer("smesher", ballot.SmesherID), - zap.Object("prev", prev), - zap.Object("curr", ballot), - ) - } + // if this ballot was the one that turned the identity to be malicious + // we call the hooks to notify tortoise and atxsdata + if !malicious && ballot.IsMalicious() { + // so this is a bit of double work (getting the malfeasance proof right after + // we stored it), BUT, probably negligble considering the amount of malfeasant + // identities we have. The other way to go about this is to allocate an individual channel + // for every write (so that every writer gets its own response with the potential proof) + // However I find that more costly than this approach. + var blob sql.Blob + err := identities.LoadMalfeasanceBlob(ctx, msh.cdb, ballot.SmesherID.Bytes(), &blob) + switch err { + case nil: + proof = new(wire.MalfeasanceProof) + codec.MustDecode(blob.Bytes, proof) + msh.atxsdata.SetMalicious(ballot.SmesherID) + msh.trtl.OnMalfeasance(ballot.SmesherID) + default: + return nil, fmt.Errorf("load malfeasance blob: %w", err) } - if err := ballots.Add(dbtx, ballot); err != nil && !errors.Is(err, sql.ErrObjectExists) { - return err - } - return nil - }); err != nil { - return nil, err - } - if proof != nil { - msh.atxsdata.SetMalicious(ballot.SmesherID) - msh.trtl.OnMalfeasance(ballot.SmesherID) } return proof, nil } diff --git a/mesh/mesh_test.go b/mesh/mesh_test.go index a355ff590d..7832fd1b45 100644 --- a/mesh/mesh_test.go +++ b/mesh/mesh_test.go @@ -51,7 +51,7 @@ func createTestMesh(t *testing.T) *testMesh { t.Helper() types.SetLayersPerEpoch(3) lg := zaptest.NewLogger(t) - db := statesql.InMemory() + db := statesql.InMemoryTest(t) atxsdata := atxsdata.New() ctrl := gomock.NewController(t) tm := &testMesh{ @@ -66,6 +66,14 @@ func createTestMesh(t *testing.T) *testMesh { exec := NewExecutor(db, atxsdata, tm.mockVM, tm.mockState, lg) msh, err := NewMesh(db, atxsdata, tm.mockClock, tm.mockTortoise, exec, tm.mockState, lg) require.NoError(t, err) + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + go func() { + msh.Start(ctx) + close(done) + }() + t.Cleanup(func() { <-done }) + t.Cleanup(cancel) gLid := types.GetEffectiveGenesis() checkLastAppliedInDB(t, msh, gLid) checkProcessedInDB(t, msh, gLid) @@ -163,6 +171,7 @@ func createLayerBallots(tb testing.TB, mesh *Mesh, lyrID types.LayerID) []*types malProof, err := mesh.AddBallot(context.Background(), ballot) require.NoError(tb, err) require.Nil(tb, malProof) + require.False(tb, ballot.IsMalicious()) } return blts } diff --git a/mesh/metrics/prometheus.go b/mesh/metrics/prometheus.go index 6c46fb6499..2583bbe455 100644 --- a/mesh/metrics/prometheus.go +++ b/mesh/metrics/prometheus.go @@ -8,14 +8,28 @@ import ( const ( // Subsystem is a subsystem shared by all metrics exposed by this package. - Subsystem = "mesh" + subsystem = "mesh" ) // LayerNumBlocks is number of blocks in layer. var LayerNumBlocks = metrics.NewHistogramWithBuckets( "layer_num_blocks", - Subsystem, + subsystem, "Number of blocks in layer", []string{}, prometheus.ExponentialBuckets(1, 2, 16), ) + +var BallotWaitWrite = metrics.NewSimpleHistogram( + "ballot_wait_write", + subsystem, + "time waited for ballot to be written", + prometheus.ExponentialBuckets(0.01, 10, 5), +) + +var BallotWaitRetry = metrics.NewSimpleHistogram( + "ballot_wait_retry", + subsystem, + "time waited for when in retry mode", + prometheus.ExponentialBuckets(0.01, 10, 5), +) diff --git a/metrics/common.go b/metrics/common.go index 46860e9fb3..baf14d7913 100644 --- a/metrics/common.go +++ b/metrics/common.go @@ -36,6 +36,13 @@ func NewHistogram(name, subsystem, help string, labels []string) *prometheus.His ) } +// NewSimpleHistogram returns a histogram without labels. +func NewSimpleHistogram(name, subsystem, help string, buckets []float64) prometheus.Histogram { + return promauto.NewHistogram( + prometheus.HistogramOpts{Namespace: Namespace, Subsystem: subsystem, Name: name, Help: help, Buckets: buckets}, + ) +} + // NewHistogramWithBuckets creates a Histogram metrics with custom buckets. func NewHistogramWithBuckets( name, subsystem, help string, @@ -76,9 +83,15 @@ func ReportMessageLatency(protocol, msgType string, latency time.Duration) { receivedMessagesLatency.WithLabelValues(protocol, msgType, sign).Observe(seconds) } -func NewCounterOpts(ns, name, help string) prometheus.CounterOpts { +// NewSimpleCounter creates a simple prometheus counter. +func NewSimpleCounter(subsystem, name, help string) prometheus.Counter { + return promauto.NewCounter(NewCounterOpts(subsystem, name, help)) +} + +func NewCounterOpts(subsystem, name, help string) prometheus.CounterOpts { return prometheus.CounterOpts{ - Namespace: ns, + Namespace: Namespace, + Subsystem: subsystem, Name: name, Help: help, } diff --git a/node/node.go b/node/node.go index 3c66b0dee5..0a5cf64af1 100644 --- a/node/node.go +++ b/node/node.go @@ -717,6 +717,11 @@ func (app *App) initServices(ctx context.Context) error { return fmt.Errorf("create mesh: %w", err) } + app.eg.Go(func() error { + msh.Start(ctx) + return nil + }) + pruner := prune.New(app.db, app.Config.Tortoise.Hdist, app.Config.PruneActivesetsFrom, prune.WithLogger(mlog)) if err := pruner.Prune(app.clock.CurrentLayer()); err != nil { return fmt.Errorf("pruner %w", err) From 927d375950ceae50e625af36fd49976e82eae420 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:59:27 +0000 Subject: [PATCH 16/73] Update CHANGELOG.md (#6359) ## Motivation Update `CHANGELOG.md` in preparation of v1.7.2 release. --- CHANGELOG.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a31f2d5169..4cb9d3c7e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,31 @@ See [RELEASE](./RELEASE.md) for workflow instructions. ## v1.7.2 -### Highlights +### Upgrade information -### Features +This version adds new and updates existing `v2alpha1` API endpoints and does not require any special upgrade steps. +Additionally performance improvements were made to the node. ### Improvements * [#6289](https://github.com/spacemeshos/go-spacemesh/pull/6289) Added write coalescing for ballots, reducing the amount of time and CPU we're spending on writing ballots. +* [#6353](https://github.com/spacemeshos/go-spacemesh/pull/6353) Add new malfeasance API. + +* [#6357](https://github.com/spacemeshos/go-spacemesh/pull/6353) Add template address to account service. + +## v1.7.1 + +### Upgrade information + +This version has no code changes to v1.7.0, only the release process was updated to fix a problem with the windows +build. + +### Improvements + +* [#6351](https://github.com/spacemeshos/go-spacemesh/pull/6351) Fixed filenames of windows builds. + ## v1.7.0 ### Upgrade information From c55ec34d72a66a609a231c7429fb903919da857a Mon Sep 17 00:00:00 2001 From: acud <12988138+acud@users.noreply.github.com> Date: Tue, 1 Oct 2024 23:29:47 +0000 Subject: [PATCH 17/73] chore: allow hare4 (#6360) ## Motivation Allows `hare4` to be enabled and improves the metrics registration. --- hare4/metrics.go | 24 ++++++++++++------------ node/node.go | 1 - 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/hare4/metrics.go b/hare4/metrics.go index 14f496b938..8a79df5d8b 100644 --- a/hare4/metrics.go +++ b/hare4/metrics.go @@ -63,34 +63,34 @@ var ( ) proposalsLatency = protocolLatency.WithLabelValues("proposals") activeLatency = protocolLatency.WithLabelValues("active") - requestCompactCounter = prometheus.NewCounter(metrics.NewCounterOpts( + requestCompactCounter = metrics.NewSimpleCounter( namespace, "request_compact_count", "number of times we needed to go into a clarifying round", - )) - requestCompactErrorCounter = prometheus.NewCounter(metrics.NewCounterOpts( + ) + requestCompactErrorCounter = metrics.NewSimpleCounter( namespace, "request_compact_error_count", "number of errors got when requesting compact proposals from peer", - )) - requestCompactHandlerCounter = prometheus.NewCounter(metrics.NewCounterOpts( + ) + requestCompactHandlerCounter = metrics.NewSimpleCounter( namespace, "request_compact_handler_count", "number of requests handled on the compact stream handler", - )) - messageCacheMiss = prometheus.NewCounter(metrics.NewCounterOpts( + ) + messageCacheMiss = metrics.NewSimpleCounter( namespace, "message_cache_miss", "number of message cache misses", - )) - messageCompactsCounter = prometheus.NewCounter(metrics.NewCounterOpts( + ) + messageCompactsCounter = metrics.NewSimpleCounter( namespace, "message_compacts_count", "number of compact proposals that arrived to be checked in a message", - )) - preroundSigFailCounter = prometheus.NewCounter(metrics.NewCounterOpts( + ) + preroundSigFailCounter = metrics.NewSimpleCounter( namespace, "preround_signature_fail_count", "counter for signature fails on preround with compact message", - )) + ) ) diff --git a/node/node.go b/node/node.go index 0a5cf64af1..40de6dbe29 100644 --- a/node/node.go +++ b/node/node.go @@ -937,7 +937,6 @@ func (app *App) initServices(ctx context.Context) error { ) return nil }) - panic("hare4 still not enabled") } propHare := &proposalConsumerHare{ From 9f20bfe1293bdc463d48072cfbe039094de27935 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:02:38 +0000 Subject: [PATCH 18/73] Update CHANGELOG (#6363) ## Motivation Update CHANGELOG in preparation for `v1.7.3` --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cb9d3c7e6..113315dd28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ See [RELEASE](./RELEASE.md) for workflow instructions. +## v1.7.3 + +### Upgrade information + +This release prepares the node for enabling hare4 in the near future. No special upgrade steps are required. + +### Improvements + +* [#6360](https://github.com/spacemeshos/go-spacemesh/pull/6360) Prepare node for hare4. + ## v1.7.2 ### Upgrade information From 5844a210791035ff140e3a49ec6b39cf0b1ab1d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:29:20 +0000 Subject: [PATCH 19/73] build(deps): Bump github.com/prometheus/common from 0.59.1 to 0.60.0 (#6362) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 78c0f83c2e..eac42872ab 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a github.com/prometheus/client_golang v1.20.4 github.com/prometheus/client_model v0.6.1 - github.com/prometheus/common v0.59.1 + github.com/prometheus/common v0.60.0 github.com/quic-go/quic-go v0.47.0 github.com/rs/cors v1.11.1 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 @@ -224,7 +224,7 @@ require ( golang.org/x/crypto v0.27.0 // indirect golang.org/x/mod v0.21.0 // indirect golang.org/x/net v0.29.0 // indirect - golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.25.0 // indirect golang.org/x/term v0.24.0 // indirect golang.org/x/text v0.18.0 // indirect diff --git a/go.sum b/go.sum index 0c104bdb00..6941cbb066 100644 --- a/go.sum +++ b/go.sum @@ -533,8 +533,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0= -github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0= +github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= +github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= @@ -783,8 +783,8 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= -golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From 205eacfbe02640fc528251b8951900f9092705c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:24:00 +0000 Subject: [PATCH 20/73] build(deps): Bump golang from 1.22 to 1.23 (#6256) Bumps golang from 1.22 to 1.23. [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang&package-manager=docker&previous-version=1.22&new-version=1.23)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Co-authored-by: Matthias <5011972+fasmat@users.noreply.github.com> --- .github/workflows/api-swagger-ui.yml | 2 +- .github/workflows/ci.yml | 4 +- .golangci.yml | 492 ++++++++++++++--------- Dockerfile | 2 +- Makefile | 6 +- README.md | 8 +- activation/activation.go | 7 +- activation/e2e/atx_merge_test.go | 2 +- activation/handler_test.go | 2 +- activation/handler_v1_test.go | 2 +- activation/interface.go | 2 +- activation/malfeasance.go | 19 +- activation/malfeasance_test.go | 34 +- activation/nipost_test.go | 2 - activation/post_supervisor.go | 2 +- api/grpcserver/admin_service.go | 8 +- api/grpcserver/debug_service.go | 2 +- api/grpcserver/grpcserver_test.go | 8 +- api/grpcserver/post_info_service.go | 6 +- api/grpcserver/post_info_service_test.go | 4 +- api/grpcserver/transaction_service.go | 4 +- api/grpcserver/v2alpha1/layer.go | 4 +- api/grpcserver/v2alpha1/layer_test.go | 2 +- api/grpcserver/v2alpha1/transaction.go | 8 +- beacon/beacon.go | 2 +- beacon/beacon_test.go | 6 +- beacon/handlers_test.go | 2 +- beacon/state.go | 5 +- blocks/certifier.go | 7 +- blocks/generator.go | 3 +- blocks/metrics.go | 42 +- bootstrap.Dockerfile | 2 +- cmd/bootstrapper/server.go | 6 +- codec/codec.go | 2 +- common/types/activation.go | 2 +- common/types/ballot.go | 6 +- common/types/block.go | 4 +- common/types/eligibility.go | 2 +- common/types/layer.go | 2 +- common/types/proposal.go | 8 +- common/types/transaction_result.go | 2 +- config/presets/standalone.go | 6 +- datastore/store.go | 2 - fetch/fetch.go | 5 +- fetch/mesh_data.go | 2 +- fetch/p2p_test.go | 5 +- fetch/wire_types.go | 2 +- genvm/templates/multisig/handler.go | 12 +- genvm/templates/vesting/handler.go | 4 +- go.mod | 14 +- go.sum | 24 +- hare3/eligibility/oracle.go | 30 +- hare3/hare_test.go | 5 +- hare3/malfeasance_test.go | 8 +- hare3/protocol.go | 8 +- hare4/eligibility/oracle.go | 30 +- hare4/hare_test.go | 5 +- hare4/malfeasance_test.go | 8 +- hare4/protocol.go | 8 +- malfeasance/handler_test.go | 12 +- mesh/interface.go | 4 - mesh/malfeasance_test.go | 8 +- mesh/mesh.go | 5 +- mesh/mesh_test.go | 10 +- mesh/mocks/mocks.go | 61 --- miner/active_set_generator.go | 6 +- miner/active_set_generator_test.go | 4 - miner/mocks/mocks.go | 12 +- miner/proposal_builder.go | 8 +- miner/proposal_builder_test.go | 6 +- node/node.go | 21 +- node/node_test.go | 4 +- p2p/addresslist.go | 6 +- p2p/dhtdiscovery/discovery.go | 9 +- p2p/gater.go | 12 +- p2p/gater_test.go | 4 +- p2p/handshake/handshake.go | 27 +- p2p/host.go | 4 +- p2p/metrics/connections.go | 6 +- p2p/pubsub/pubsub.go | 2 +- p2p/pubsub/wrapper.go | 4 +- p2p/upgrade.go | 8 - proposals/eligibility_validator.go | 2 +- proposals/handler.go | 2 +- proposals/metrics.go | 2 +- sql/certificates/certs.go | 2 +- sql/metrics/prometheus.go | 2 +- syncer/atxsync/atxsync.go | 2 +- syncer/atxsync/syncer_test.go | 4 - syncer/data_fetch.go | 13 +- syncer/data_fetch_test.go | 11 +- syncer/find_fork.go | 14 +- syncer/interface.go | 6 +- syncer/malsync/syncer_test.go | 4 - syncer/mocks/mocks.go | 59 --- syncer/state_syncer_test.go | 18 +- syncer/syncer.go | 12 +- syncer/syncer_test.go | 6 +- system/mocks/tortoise.go | 13 +- system/tortoise.go | 4 +- systest/Dockerfile | 4 +- systest/validation/consensus.go | 2 +- timesync/clock.go | 2 +- timesync/peersync/sync.go | 3 +- tortoise/algorithm.go | 16 +- tortoise/fixture_test.go | 3 +- tortoise/model/core.go | 4 +- tortoise/recover.go | 5 +- tortoise/recover_test.go | 19 +- tortoise/rerun_test.go | 12 +- tortoise/sim/votes.go | 2 +- tortoise/state.go | 8 +- tortoise/threshold.go | 6 +- tortoise/tortoise.go | 10 +- tortoise/tortoise_test.go | 296 ++++++-------- tortoise/tracer.go | 2 +- tortoise/tracer_test.go | 3 +- txs/cache.go | 10 +- txs/conservative_state.go | 4 +- txs/mempool_iterator.go | 2 +- txs/metrics.go | 4 +- txs/nano_tx.go | 4 +- 122 files changed, 741 insertions(+), 1012 deletions(-) diff --git a/.github/workflows/api-swagger-ui.yml b/.github/workflows/api-swagger-ui.yml index a38a3ef258..b516981d25 100644 --- a/.github/workflows/api-swagger-ui.yml +++ b/.github/workflows/api-swagger-ui.yml @@ -1,7 +1,7 @@ name: Build and Push Swagger-UI env: - go-version: "1.22" + go-version: "1.23" on: # Allow manually triggering this workflow diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1afcb85f7..2ceaa84d2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: CI env: - go-version: "1.22" + go-version: "1.23" GCLOUD_KEY: ${{ secrets.GCLOUD_KEY }} PROJECT_NAME: ${{ secrets.PROJECT_NAME }} CLUSTER_NAME: ${{ secrets.CLUSTER_NAME }} @@ -114,7 +114,7 @@ jobs: - name: setup env run: make install - name: lint - run: make lint-github-action + run: make lint build: runs-on: ${{ matrix.os }} diff --git a/.golangci.yml b/.golangci.yml index a25911486b..08a8d82966 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -4,122 +4,6 @@ # This file is not a configuration example, # it contains the exhaustive configuration with explanations of the options. -# Options for analysis running. -run: - # Number of operating system threads (`GOMAXPROCS`) that can execute golangci-lint simultaneously. - # If it is explicitly set to 0 (i.e. not the default) then golangci-lint will automatically set the value to match Linux container CPU quota. - # Default: the number of logical CPUs in the machine - # concurrency: 4 - - # Timeout for analysis, e.g. 30s, 5m. - # Default: 1m - timeout: 5m - - # Exit code when at least one issue was found. - # Default: 1 - # issues-exit-code: 1 - - # Include test files or not. - # Default: true - # tests: true - - # List of build tags, all linters use it. - # Default: [] - # build-tags: - # - mytag - - # If set, we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - # - # Allowed values: readonly|vendor|mod - # Default: "" - modules-download-mode: readonly - - # Allow multiple parallel golangci-lint instances running. - # If false, golangci-lint acquires file lock on start. - # Default: false - # allow-parallel-runners: true - - # Allow multiple golangci-lint instances running, but serialize them around a lock. - # If false, golangci-lint exits with an error if it fails to acquire file lock on start. - # Default: false - # allow-serial-runners: true - - # Define the Go version limit. - # Mainly related to generics support since go1.18. - # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.17 - # go: '1.19' - -# output configuration options -output: - # The formats used to render issues. - # Format: `colored-line-number`, `line-number`, `json`, `colored-tab`, `tab`, `checkstyle`, `code-climate`, `junit-xml`, `github-actions`, `teamcity` - # Output path can be either `stdout`, `stderr` or path to the file to write to. - # - # For the CLI flag (`--out-format`), multiple formats can be specified by separating them by comma. - # The output can be specified for each of them by separating format name and path by colon symbol. - # Example: "--out-format=checkstyle:report.xml,json:stdout,colored-line-number" - # The CLI flag (`--out-format`) override the configuration file. - # - # Default: - # formats: - # - format: colored-line-number - # path: stdout - formats: - # - format: json - # path: stderr - # - format: checkstyle - # path: report.xml - - format: colored-line-number - - # Print lines of code with issue. - # Default: true - # print-issued-lines: false - - # Print linter name in the end of issue text. - # Default: true - # print-linter-name: false - - # Make issues output unique by line. - # Default: true - # uniq-by-line: false - - # Add a prefix to the output file references. - # Default: "" - # path-prefix: "" - - # Sort results by the order defined in `sort-order`. - # Default: false - sort-results: true - - # Order to use when sorting results. - # Require `sort-results` to `true`. - # Possible values: `file`, `linter`, and `severity`. - # - # If the severity values are inside the following list, they are ordered in this order: - # 1. error - # 2. warning - # 3. high - # 4. medium - # 5. low - # Either they are sorted alphabetically. - # - # Default: ["file"] - sort-order: - - linter - - severity - - file # filepath, line, and column. - - # Show statistics per linter. - # Default: false - # show-stats: true - linters: # Disable all linters. # Default: false @@ -131,6 +15,7 @@ linters: # - asciicheck # - bidichk # - bodyclose + - canonicalheader # - containedctx # - contextcheck - copyloopvar @@ -141,6 +26,7 @@ linters: # - dupl # - dupword # - durationcheck + # - err113 # - errcheck # - errchkjson # - errname @@ -149,6 +35,7 @@ linters: # - exhaustive # - exhaustruct # - exportloopref + - fatcontext # - forbidigo # - forcetypeassert # - funlen @@ -164,12 +51,10 @@ linters: # - gocyclo - godot # - godox - # - goerr113 - gofmt - gofumpt # - goheader # - goimports - # - gomnd # - gomoddirectives # - gomodguard # - goprintffuncname @@ -190,6 +75,7 @@ linters: # - makezero # - mirror - misspell + # - mnd # - musttag - nakedret - nestif @@ -222,11 +108,10 @@ linters: # - testpackage # - thelper # - tparallel - - typecheck # - unconvert # - unparam - unused - # - usestdlibvars + - usestdlibvars # - varnamelen # - wastedassign # - whitespace @@ -244,6 +129,7 @@ linters: # - asciicheck # - bidichk # - bodyclose + # - canonicalheader # - containedctx # - contextcheck # - copyloopvar @@ -254,6 +140,7 @@ linters: # - dupl # - dupword # - durationcheck + # - err113 # - errcheck # - errchkjson # - errname @@ -262,6 +149,7 @@ linters: # - exhaustive # - exhaustruct # - exportloopref + # - fatcontext # - forbidigo # - forcetypeassert # - funlen @@ -277,12 +165,10 @@ linters: # - gocyclo # - godot # - godox - # - goerr113 # - gofmt # - gofumpt # - goheader # - goimports - # - gomnd # - gomoddirectives # - gomodguard # - goprintffuncname @@ -303,6 +189,7 @@ linters: # - makezero # - mirror # - misspell + # - mnd # - musttag # - nakedret # - nestif @@ -335,7 +222,6 @@ linters: # - testpackage # - thelper # - tparallel - # - typecheck # - unconvert # - unparam # - unused @@ -346,6 +232,17 @@ linters: # - wrapcheck # - wsl # - zerologlint + # - deadcode # Deprecated + # - exhaustivestruct # Deprecated + # - golint # Deprecated + # - ifshort # Deprecated + # - interfacer # Deprecated + # - maligned # Deprecated + # - gomnd # Deprecated + # - nosnakecase # Deprecated + # - scopelint # Deprecated + # - structcheck # Deprecated + # - varcheck # Deprecated # Enable presets. # https://golangci-lint.run/usage/linters @@ -369,8 +266,14 @@ linters: # Default: false # fast: true + # All available settings of specific linters. linters-settings: + copyloopvar: + # Check all assigning the loop variable to another variable. + # Default: false + check-alias: true + depguard: # Rules to apply. # @@ -418,16 +321,17 @@ linters-settings: gci: # Section configuration to compare against. # Section names are case-insensitive and may contain parameters in (). - # The default order of sections is `standard > default > custom > blank > dot > alias`, + # The default order of sections is `standard > default > custom > blank > dot > alias > localmodule`, # If `custom-order` is `true`, it follows the order of `sections` option. # Default: ["standard", "default"] sections: - - standard # Standard section: captures all standard packages. - - default # Default section: contains all imports that could not be matched to another section type. + - standard # Standard section: captures all standard packages. + - default # Default section: contains all imports that could not be matched to another section type. - prefix(github.com/spacemeshos/go-spacemesh) # Custom section: groups all imports with the specified Prefix. - # - blank # Blank section: contains all blank imports. This section is not present unless explicitly enabled. - # - dot # Dot section: contains all dot imports. This section is not present unless explicitly enabled. - # - alias # Alias section: contains all alias imports. This section is not present unless explicitly enabled. + # - blank # Blank section: contains all blank imports. This section is not present unless explicitly enabled. + # - dot # Dot section: contains all dot imports. This section is not present unless explicitly enabled. + # - alias # Alias section: contains all alias imports. This section is not present unless explicitly enabled. + # - localmodule # Local module section: contains all local packages. This section is not present unless explicitly enabled. # Skip generated files. # Default: true @@ -438,6 +342,27 @@ linters-settings: # Default: false # custom-order: true + # Drops lexical ordering for custom sections. + # Default: false + # no-lex-order: true + + godot: + # Comments to be checked: `declarations`, `toplevel`, or `all`. + # Default: declarations + # scope: toplevel + # List of regexps for excluding particular comment lines from check. + # Default: [] + exclude: + # Exclude todo and fixme comments. + - "^fixme:" + - "^todo:" + # Check that each sentence ends with a period. + # Default: true + # period: false + # Check that each sentence starts with a capital letter. + # Default: false + # capital: true + gofmt: # Simplify code: gofmt with `-s` option. # Default: true @@ -446,10 +371,10 @@ linters-settings: # https://pkg.go.dev/cmd/gofmt # Default: [] rewrite-rules: - - pattern: "interface{}" - replacement: "any" - - pattern: "a[b:len(a)]" - replacement: "a[b:]" + - pattern: 'interface{}' + replacement: 'any' + - pattern: 'a[b:len(a)]' + replacement: 'a[b:]' gofumpt: # Module path which contains the source code being formatted. @@ -463,39 +388,12 @@ linters-settings: gosimple: # Sxxxx checks in https://staticcheck.io/docs/configuration/options/#checks # Default: ["*"] - checks: ["all"] - - govet: - # Disable all analyzers. - # Default: false - disable-all: false - # Enable analyzers by name. - # (in addition to default: - # appends, asmdecl, assign, atomic, bools, buildtag, cgocall, composites, copylocks, defers, directive, errorsas, - # framepointer, httpresponse, ifaceassert, loopclosure, lostcancel, nilfunc, printf, shift, sigchanyzer, slog, - # stdmethods, stringintconv, structtag, testinggoroutine, tests, timeformat, unmarshal, unreachable, unsafeptr, - # unusedresult - # ). - # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. - # Default: [] - # enable: - - # Enable all analyzers. - # Default: false - enable-all: false - # Disable analyzers by name. - # (in addition to default - # atomicalign, deepequalerrors, fieldalignment, findcall, nilness, reflectvaluecompare, shadow, sortslice, - # timeformat, unusedwrite - # ). - # Run `GL_DEBUG=govet golangci-lint run --enable=govet` to see default, all available analyzers, and enabled analyzers. - # Default: [] - # disable: + checks: [ "all" ] importas: # Do not allow unaliased imports of aliased packages. # Default: false - # no-unaliased: true + no-unaliased: true # Do not allow non-required aliases. # Default: false # no-extra-aliases: true @@ -583,11 +481,6 @@ linters-settings: # Default: "" mode: restricted - nakedret: - # Make an issue if func has more lines of code than this setting, and it has naked returns. - # Default: 30 - max-func-lines: 30 - nestif: # Minimal complexity of if statements to report. # Default: 5 @@ -633,7 +526,7 @@ linters-settings: # Sets the default failure confidence. # This means that linting errors with less than 0.8 confidence will be ignored. # Default: 0.8 - # confidence: 0.8 + # confidence: 0.1 spancheck: # Checks to enable. @@ -652,11 +545,17 @@ linters-settings: # Default: [] ignore-check-signatures: - "telemetry.RecordError" - + # A list of regexes for additional function signatures that create spans. + # This is useful if you have a utility method to create spans. + # Each entry should be of the form `:`, where `telemetry-type` can be `opentelemetry` or `opencensus`. + # https://github.com/jjti/go-spancheck#extra-start-span-signatures + # Default: [] + # extra-start-span-signatures: + # - "github.com/user/repo/telemetry/trace.Start:opentelemetry" staticcheck: # SAxxxx checks in https://staticcheck.io/docs/configuration/options/#checks # Default: ["*"] - checks: ["all"] + checks: [ "all" ] testifylint: # Enable all checkers (https://github.com/Antonboom/testifylint#checkers). @@ -674,13 +573,17 @@ linters-settings: # - error-is-as # - error-nil # - expected-actual - # - go-require # - float-compare + # - formatter + # - go-require # - len + # - negative-positive # - nil-compare # - require-error + # - suite-broken-parallel # - suite-dont-use-pkg # - suite-extra-assert-call + # - suite-subtest-run # - suite-thelper # - useless-assert @@ -690,7 +593,8 @@ linters-settings: # Enable checkers by name # (in addition to default # blank-import, bool-compare, compares, empty, error-is-as, error-nil, expected-actual, go-require, float-compare, - # len, nil-compare, require-error, suite-dont-use-pkg, suite-extra-assert-call, useless-assert + # formatter, len, negative-positive, nil-compare, require-error, suite-broken-parallel, suite-dont-use-pkg, + # suite-extra-assert-call, suite-subtest-run, useless-assert # ). # enable: # - blank-import @@ -700,19 +604,71 @@ linters-settings: # - error-is-as # - error-nil # - expected-actual - # - go-require # - float-compare + # - formatter + # - go-require # - len + # - negative-positive # - nil-compare # - require-error + # - suite-broken-parallel # - suite-dont-use-pkg # - suite-extra-assert-call + # - suite-subtest-run # - suite-thelper # - useless-assert + usestdlibvars: + # Suggest the use of http.MethodXX. + # Default: true + http-method: false + # Suggest the use of http.StatusXX. + # Default: true + http-status-code: false + # Suggest the use of time.Weekday.String(). + # Default: true + time-weekday: true + # Suggest the use of time.Month.String(). + # Default: false + time-month: true + # Suggest the use of time.Layout. + # Default: false + time-layout: true + # Suggest the use of crypto.Hash.String(). + # Default: false + crypto-hash: true + # Suggest the use of rpc.DefaultXXPath. + # Default: false + default-rpc-path: true + # Suggest the use of sql.LevelXX.String(). + # Default: false + sql-isolation-level: true + # Suggest the use of tls.SignatureScheme.String(). + # Default: false + tls-signature-scheme: true + # Suggest the use of constant.Kind.String(). + # Default: false + constant-kind: true + unused: + # Mark all struct fields that have been written to as used. + # Default: true + field-writes-are-uses: false + # Treat IncDec statement (e.g. `i++` or `i--`) as both read and write operation instead of just write. + # Default: false + # post-statements-are-reads: true + # Mark all exported fields as used. + # default: true exported-fields-are-used: false + # Mark all function parameters as used. + # default: true + # parameters-are-used: false + # Mark all local variables as used. + # default: true local-variables-are-used: false + # Mark all identifiers inside generated files as used. + # Default: true + # generated-is-used: false issues: # List of regexps of issue texts to exclude. @@ -727,6 +683,36 @@ issues: # Excluding configuration per-path, per-linter, per-text and per-source # exclude-rules: + # # Exclude some linters from running on tests files. + # - path: _test\.go + # linters: + # - gocyclo + # - errcheck + # - dupl + # - gosec + + # # Run some linter only for test files by excluding its issues for everything else. + # - path-except: _test\.go + # linters: + # - forbidigo + + # # Exclude known linters from partially hard-vendored code, + # # which is impossible to exclude via `nolint` comments. + # # `/` will be replaced by current OS file path separator to properly work on Windows. + # - path: internal/hmac/ + # text: "weak cryptographic primitive" + # linters: + # - gosec + + # # Exclude some `staticcheck` messages. + # - linters: + # - staticcheck + # text: "SA9003:" + + # # Exclude `lll` issues for long lines with `go:generate`. + # - linters: + # - lll + # source: "^//go:generate " # Independently of option `exclude` we use default exclude patterns, # it can be disabled by this option. @@ -759,20 +745,21 @@ issues: # If it's not, please let us know. # "/" will be replaced by current OS file path separator to properly work on Windows. # Default: [] - exclude-files: - - "^mock_*\\.go$" + # exclude-files: + # - ".*\\.my\\.go$" + # - lib/bad.go - # To follow strictly the Go generated file convention. + # Mode of the generated files analysis. # - # If set to true, source files that have lines matching only the following regular expression will be excluded: - # `^// Code generated .* DO NOT EDIT\.$` - # This line must appear before the first non-comment, non-blank text in the file. - # https://go.dev/s/generatedcode + # - `strict`: sources are excluded by following strictly the Go generated file convention. + # Source files that have lines matching only the following regular expression will be excluded: `^// Code generated .* DO NOT EDIT\.$` + # This line must appear before the first non-comment, non-blank text in the file. + # https://go.dev/s/generatedcode + # - `lax`: sources are excluded if they contain lines `autogenerated file`, `code generated`, `do not edit`, etc. + # - `disable`: disable the generated files exclusion. # - # By default, a lax pattern is applied: - # sources are excluded if they contain lines `autogenerated file`, `code generated`, `do not edit`, etc. - # Default: false - # exclude-generated-strict: true + # Default: lax + # exclude-generated: strict # The list of ids of default excludes to include or disable. # https://golangci-lint.run/usage/false-positives/#default-exclusions @@ -821,14 +808,14 @@ issues: # Default: "" # new-from-patch: path/to/patch/file - # Fix found issues (if it's supported by the linter). - # Default: false - # fix: true - # Show issues in any part of update files (requires new-from-rev or new-from-patch). # Default: false whole-files: true + # Fix found issues (if it's supported by the linter). + # Default: false + # fix: true + severity: # Set the default severity for issues. # @@ -862,3 +849,132 @@ severity: # - linters: # - dupl # severity: info + + # Options for analysis running. +run: + # Timeout for analysis, e.g. 30s, 5m. + # Default: 1m + timeout: 5m + + # Exit code when at least one issue was found. + # Default: 1 + # issues-exit-code: 2 + + # Include test files or not. + # Default: true + # tests: false + + # List of build tags, all linters use it. + # Default: [] + # build-tags: + # - mytag + + # If set, we pass it to "go list -mod={option}". From "go help modules": + # If invoked with -mod=readonly, the go command is disallowed from the implicit + # automatic updating of go.mod described above. Instead, it fails when any changes + # to go.mod are needed. This setting is most useful to check that go.mod does + # not need updates, such as in a continuous integration and testing system. + # If invoked with -mod=vendor, the go command assumes that the vendor + # directory holds the correct copies of dependencies and ignores + # the dependency descriptions in go.mod. + # + # Allowed values: readonly|vendor|mod + # Default: "" + modules-download-mode: readonly + + # Allow multiple parallel golangci-lint instances running. + # If false, golangci-lint acquires file lock on start. + # Default: false + # allow-parallel-runners: true + + # Allow multiple golangci-lint instances running, but serialize them around a lock. + # If false, golangci-lint exits with an error if it fails to acquire file lock on start. + # Default: false + # allow-serial-runners: true + + # Define the Go version limit. + # Mainly related to generics support since go1.18. + # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.17 + # go: '1.19' + + # Number of operating system threads (`GOMAXPROCS`) that can execute golangci-lint simultaneously. + # If it is explicitly set to 0 (i.e. not the default) then golangci-lint will automatically set the value to match Linux container CPU quota. + # Default: the number of logical CPUs in the machine + concurrency: 4 + +# output configuration options +output: + # The formats used to render issues. + # Formats: + # - `colored-line-number` + # - `line-number` + # - `json` + # - `colored-tab` + # - `tab` + # - `html` + # - `checkstyle` + # - `code-climate` + # - `junit-xml` + # - `junit-xml-extended` + # - `github-actions` + # - `teamcity` + # - `sarif` + # Output path can be either `stdout`, `stderr` or path to the file to write to. + # + # For the CLI flag (`--out-format`), multiple formats can be specified by separating them by comma. + # The output can be specified for each of them by separating format name and path by colon symbol. + # Example: "--out-format=checkstyle:report.xml,json:stdout,colored-line-number" + # The CLI flag (`--out-format`) override the configuration file. + # + # Default: + # formats: + # - format: colored-line-number + # path: stdout + formats: + # - format: json + # path: stderr + # - format: checkstyle + # path: report.xml + - format: colored-line-number + + # Print lines of code with issue. + # Default: true + # print-issued-lines: false + + # Print linter name in the end of issue text. + # Default: true + # print-linter-name: false + + # Make issues output unique by line. + # Default: true + # uniq-by-line: false + + # Add a prefix to the output file references. + # Default: "" + # path-prefix: "" + + # Sort results by the order defined in `sort-order`. + # Default: false + sort-results: true + + # Order to use when sorting results. + # Require `sort-results` to `true`. + # Possible values: `file`, `linter`, and `severity`. + # + # If the severity values are inside the following list, they are ordered in this order: + # 1. error + # 2. warning + # 3. high + # 4. medium + # 5. low + # Either they are sorted alphabetically. + # + # Default: ["file"] + sort-order: + - linter + - severity + - file # filepath, line, and column. + + # Show statistics per linter. + # Default: false + # show-stats: true diff --git a/Dockerfile b/Dockerfile index b1a4bd87ce..832b182215 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,7 @@ ENV LANG en_US.UTF-8 ENV LANGUAGE en_US.UTF-8 ENV LC_ALL en_US.UTF-8 -FROM golang:1.22 as builder +FROM golang:1.23 as builder ARG VERSION="" ENV VERSION=${VERSION} RUN set -ex \ diff --git a/Makefile b/Makefile index 6c2acbcb1e..7c4769bfc9 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ VERSION ?= $(shell git describe --tags) COMMIT = $(shell git rev-parse HEAD) BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) -GOLANGCI_LINT_VERSION := v1.59.0 +GOLANGCI_LINT_VERSION := v1.61.0 GOTESTSUM_VERSION := v1.12.0 GOSCALE_VERSION := v1.2.0 MOCKGEN_VERSION := v0.4.0 @@ -142,10 +142,6 @@ lint-fix: get-libs ./bin/golangci-lint run --config .golangci.yml --fix .PHONY: lint-fix -lint-github-action: get-libs - ./bin/golangci-lint run --config .golangci.yml --out-format=github-actions -.PHONY: lint-github-action - cover: get-libs @$(ULIMIT) CGO_LDFLAGS="$(CGO_TEST_LDFLAGS)" go test -coverprofile=cover.out -p 1 -timeout 30m -coverpkg=./... $(UNIT_TESTS) .PHONY: cover diff --git a/README.md b/README.md index 19c2ea40e4..6a3e997c06 100644 --- a/README.md +++ b/README.md @@ -97,14 +97,15 @@ Read [this](https://github.com/golang/go/wiki/Modules#how-to-install-and-activat ### Setting Up Local Dev Environment -Building is supported on: +Building is supported on: + - Linux, GLIBC 2.34+ is required - MacOS 13 (Intel) and MacOS 14 (Arm) and newer - Windows 10 and newer FreeBSD is not officially supported. -Install [Go 1.22 or later](https://golang.org/dl/) for your platform, if you haven't already. +Install [Go 1.23 or later](https://golang.org/dl/) for your platform, if you haven't already. On Windows you need to install `make` via [msys2](https://www.msys2.org/), [MingGW-w64](http://mingw-w64.org/doku.php) or [mingw](https://chocolatey.org/packages/mingw). @@ -131,7 +132,8 @@ make go-env-test Make sure you have **OpenCL** library installed. -To check if setup was configured successfully, try to run: +To check if setup was configured successfully, try to run: + ```bash make test ``` diff --git a/activation/activation.go b/activation/activation.go index b77619d439..931c99aa7d 100644 --- a/activation/activation.go +++ b/activation/activation.go @@ -78,7 +78,7 @@ type Config struct { } // Builder struct is the struct that orchestrates the creation of activation transactions -// it is responsible for initializing post, receiving poet proof and orchestrating nipost. after which it will +// it is responsible for initializing post, receiving poet proof and orchestrating nipost after which it will // calculate total weight and providing relevant view as proof. type Builder struct { accountLock sync.RWMutex @@ -142,7 +142,8 @@ func WithPoetRetryInterval(interval time.Duration) BuilderOption { // WithContext modifies parent context for background job. func WithContext(ctx context.Context) BuilderOption { return func(b *Builder) { - b.parentCtx = ctx + // TODO(mafa): fix this + b.parentCtx = ctx // nolint:fatcontext } } @@ -914,7 +915,7 @@ func (b *Builder) broadcast(ctx context.Context, atx scale.Encodable) (int, erro } // searchPositioningAtx returns atx id with the highest tick height. -// publish epoch is used for caching the positioning atx. +// Publish epoch is used for caching the positioning atx. func (b *Builder) searchPositioningAtx( ctx context.Context, nodeID types.NodeID, diff --git a/activation/e2e/atx_merge_test.go b/activation/e2e/atx_merge_test.go index e7afde89a4..3243dd7b7e 100644 --- a/activation/e2e/atx_merge_test.go +++ b/activation/e2e/atx_merge_test.go @@ -189,7 +189,7 @@ var units = [2]uint32{2, 3} // Keys were preselected to give IDs whose VRF nonces satisfy the combined storage requirement for the above `units`. // -//nolint:lll +// nolint:lll var singerKeys = [2]string{ "1f2b77052ecc193038156d5c32f08d449742e7dda81fa172f8ac90839d34c76935a5d9365d1317c3002838126409e138321c57a5651d758485336c1e7e5af101", "6f385445a53d8af57874acd2dd98023858df7aa62f0b6e91ffdd51198036e2c331d2a7c55ba1e29312ac71dd419b4edc019b6406960cfc8ffb3d7550dde2ca1b", diff --git a/activation/handler_test.go b/activation/handler_test.go index 76e8bd2278..9b734f057f 100644 --- a/activation/handler_test.go +++ b/activation/handler_test.go @@ -290,7 +290,7 @@ func TestHandler_PostMalfeasanceProofs(t *testing.T) { msg := codec.MustEncode(atx) postVerifier := NewMockPostVerifier(gomock.NewController(t)) - mh := NewInvalidPostIndexHandler(atxHdlr.cdb, atxHdlr.logger, atxHdlr.edVerifier, postVerifier) + mh := NewInvalidPostIndexHandler(atxHdlr.cdb, atxHdlr.edVerifier, postVerifier) atxHdlr.mpub.EXPECT().Publish(gomock.Any(), pubsub.MalfeasanceProof, gomock.Any()). DoAndReturn(func(_ context.Context, _ string, data []byte) error { var got mwire.MalfeasanceGossip diff --git a/activation/handler_v1_test.go b/activation/handler_v1_test.go index 0ebb6f44dd..56b9ffb7f1 100644 --- a/activation/handler_v1_test.go +++ b/activation/handler_v1_test.go @@ -658,7 +658,7 @@ func TestHandlerV1_StoreAtx(t *testing.T) { require.NotNil(t, proof) require.Equal(t, mwire.InvalidPrevATX, proof.Proof.Type) - mh := NewInvalidPrevATXHandler(atxHdlr.cdb, atxHdlr.logger, atxHdlr.edVerifier) + mh := NewInvalidPrevATXHandler(atxHdlr.cdb, atxHdlr.edVerifier) nodeID, err := mh.Validate(context.Background(), proof.Proof.Data) require.NoError(t, err) require.Equal(t, sig.NodeID(), nodeID) diff --git a/activation/interface.go b/activation/interface.go index 5bd649f5ae..0d112dd648 100644 --- a/activation/interface.go +++ b/activation/interface.go @@ -98,7 +98,7 @@ type syncer interface { // The provider of that interface ensures that only valid proofs are published (invalid ones return an error). // Proofs against an identity that is managed by the node will also return an error and will not be gossiped. // -// Additionally the publisher will only gossip proofs when the node is in sync, otherwise it will only store them. +// Additionally the publisher will only gossip proofs when the node is in sync, otherwise it will only store them // and mark the associated identity as malfeasant. type malfeasancePublisher interface { Publish(ctx context.Context, id types.NodeID, proof wire.Proof) error diff --git a/activation/malfeasance.go b/activation/malfeasance.go index 2874a96163..81d855ce58 100644 --- a/activation/malfeasance.go +++ b/activation/malfeasance.go @@ -101,8 +101,7 @@ func (mh *MalfeasanceHandler) ReportInvalidProof(numInvalidProofs *prometheus.Co } type InvalidPostIndexHandler struct { - logger *zap.Logger - db sql.Executor + db sql.Executor edVerifier *signing.EdVerifier postVerifier PostVerifier @@ -110,13 +109,11 @@ type InvalidPostIndexHandler struct { func NewInvalidPostIndexHandler( db sql.Executor, - logger *zap.Logger, edVerifier *signing.EdVerifier, postVerifier PostVerifier, ) *InvalidPostIndexHandler { return &InvalidPostIndexHandler{ - db: db, - logger: logger, + db: db, edVerifier: edVerifier, postVerifier: postVerifier, @@ -181,20 +178,14 @@ func (mh *InvalidPostIndexHandler) ReportInvalidProof(numInvalidProofs *promethe } type InvalidPrevATXHandler struct { - logger *zap.Logger - db sql.Executor + db sql.Executor edVerifier *signing.EdVerifier } -func NewInvalidPrevATXHandler( - db sql.Executor, - logger *zap.Logger, - edVerifier *signing.EdVerifier, -) *InvalidPrevATXHandler { +func NewInvalidPrevATXHandler(db sql.Executor, edVerifier *signing.EdVerifier) *InvalidPrevATXHandler { return &InvalidPrevATXHandler{ - db: db, - logger: logger, + db: db, edVerifier: edVerifier, } diff --git a/activation/malfeasance_test.go b/activation/malfeasance_test.go index cc2dc07b89..ebeeabef5e 100644 --- a/activation/malfeasance_test.go +++ b/activation/malfeasance_test.go @@ -40,13 +40,12 @@ func createIdentity(tb testing.TB, db sql.Executor, sig *signing.EdSigner) { type testMalfeasanceHandler struct { *MalfeasanceHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase + db sql.StateDatabase } func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, _ := observer.New(zapcore.WarnLevel) logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) @@ -57,8 +56,7 @@ func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { return &testMalfeasanceHandler{ MalfeasanceHandler: h, - observedLogs: observedLogs, - db: db, + db: db, } } @@ -237,29 +235,19 @@ func TestMalfeasanceHandler_Validate(t *testing.T) { type testInvalidPostIndexHandler struct { *InvalidPostIndexHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase mockPostVerifier *MockPostVerifier } func newTestInvalidPostIndexHandler(tb testing.TB) *testInvalidPostIndexHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) - logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( - func(core zapcore.Core) zapcore.Core { - return zapcore.NewTee(core, observer) - }, - ))) ctrl := gomock.NewController(tb) postVerifier := NewMockPostVerifier(ctrl) - h := NewInvalidPostIndexHandler(db, logger, signing.NewEdVerifier(), postVerifier) + h := NewInvalidPostIndexHandler(db, signing.NewEdVerifier(), postVerifier) return &testInvalidPostIndexHandler{ InvalidPostIndexHandler: h, - observedLogs: observedLogs, - db: db, mockPostVerifier: postVerifier, } } @@ -428,25 +416,17 @@ func TestInvalidPostIndexHandler_Validate(t *testing.T) { type testInvalidPrevATXHandler struct { *InvalidPrevATXHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase + db sql.StateDatabase } func newTestInvalidPrevATXHandler(tb testing.TB) *testInvalidPrevATXHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) - logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( - func(core zapcore.Core) zapcore.Core { - return zapcore.NewTee(core, observer) - }, - ))) - h := NewInvalidPrevATXHandler(db, logger, signing.NewEdVerifier()) + h := NewInvalidPrevATXHandler(db, signing.NewEdVerifier()) return &testInvalidPrevATXHandler{ InvalidPrevATXHandler: h, - observedLogs: observedLogs, - db: db, + db: db, } } diff --git a/activation/nipost_test.go b/activation/nipost_test.go index 24afc65e8d..0aabbb5079 100644 --- a/activation/nipost_test.go +++ b/activation/nipost_test.go @@ -54,7 +54,6 @@ type testNIPostBuilder struct { mDb sql.LocalDatabase mLogger *zap.Logger - mPoetDb *MockpoetDbAPI mClock *MocklayerClock mPostService *MockpostService mPostClient *MockPostClient @@ -84,7 +83,6 @@ func newTestNIPostBuilder(tb testing.TB) *testNIPostBuilder { eventSub: sub.Out(), mDb: localsql.InMemory(), - mPoetDb: NewMockpoetDbAPI(ctrl), mPostService: NewMockpostService(ctrl), mPostClient: NewMockPostClient(ctrl), mLogger: logger, diff --git a/activation/post_supervisor.go b/activation/post_supervisor.go index 709d008dba..bc49dd63f1 100644 --- a/activation/post_supervisor.go +++ b/activation/post_supervisor.go @@ -203,7 +203,7 @@ func (ps *PostSupervisor) Stop(deleteFiles bool) error { } // captureCmdOutput returns a function that reads from the given pipe and logs the output. -// it returns when the pipe is closed. +// It returns when the pipe is closed. func (ps *PostSupervisor) captureCmdOutput(pipe io.ReadCloser, smesherId types.NodeID) func() error { return func() error { scanner := bufio.NewScanner(pipe) diff --git a/api/grpcserver/admin_service.go b/api/grpcserver/admin_service.go index 75bcbd15ff..2c525c85b4 100644 --- a/api/grpcserver/admin_service.go +++ b/api/grpcserver/admin_service.go @@ -84,7 +84,7 @@ func (a *AdminService) CheckpointStream( } err := checkpoint.Generate(stream.Context(), afero.NewOsFs(), a.db, a.dataDir, snapshot, numAtxs) if err != nil { - return status.Errorf(codes.Internal, fmt.Sprintf("failed to create checkpoint: %s", err.Error())) + return status.Errorf(codes.Internal, "failed to create checkpoint: %s", err.Error()) } fname := checkpoint.SelfCheckpointFilename(a.dataDir, snapshot) if err := stream.SendHeader(metadata.MD{}); err != nil { @@ -92,7 +92,7 @@ func (a *AdminService) CheckpointStream( } f, err := os.Open(fname) if err != nil { - return status.Errorf(codes.Internal, fmt.Sprintf("failed to open file %s: %s", fname, err.Error())) + return status.Errorf(codes.Internal, "failed to open file %s: %s", fname, err.Error()) } defer f.Close() var ( @@ -109,7 +109,7 @@ func (a *AdminService) CheckpointStream( if errors.Is(err, io.EOF) { return nil } - return status.Errorf(codes.Internal, fmt.Sprintf("failed to read from file %s: %s", fname, err.Error())) + return status.Errorf(codes.Internal, "failed to read from file %s: %s", fname, err.Error()) } if err = stream.Send(&pb.CheckpointStreamResponse{Data: buf[:chunk]}); err != nil { return fmt.Errorf("send to stream: %w", err) @@ -127,7 +127,7 @@ func (a *AdminService) Recover(ctx context.Context, _ *pb.RecoverRequest) (*empt func (a *AdminService) EventsStream(_ *pb.EventStreamRequest, stream pb.AdminService_EventsStreamServer) error { sub, buf, err := events.SubscribeUserEvents(events.WithBuffer(1000)) if err != nil { - return status.Errorf(codes.FailedPrecondition, err.Error()) + return status.Errorf(codes.FailedPrecondition, "%s", err.Error()) } defer sub.Close() // send empty header after subscribing to the channel. diff --git a/api/grpcserver/debug_service.go b/api/grpcserver/debug_service.go index cd107b41eb..264bb9e984 100644 --- a/api/grpcserver/debug_service.go +++ b/api/grpcserver/debug_service.go @@ -142,7 +142,7 @@ func (d *DebugService) NetworkInfo(ctx context.Context, _ *emptypb.Empty) (*pb.N func (d *DebugService) ActiveSet(ctx context.Context, req *pb.ActiveSetRequest) (*pb.ActiveSetResponse, error) { actives, err := d.oracle.ActiveSet(ctx, types.EpochID(req.Epoch)) if err != nil { - return nil, status.Errorf(codes.Internal, fmt.Sprintf("active set for epoch %d: %s", req.Epoch, err.Error())) + return nil, status.Errorf(codes.Internal, "active set for epoch %d: %s", req.Epoch, err.Error()) } resp := &pb.ActiveSetResponse{} for _, atxid := range actives { diff --git a/api/grpcserver/grpcserver_test.go b/api/grpcserver/grpcserver_test.go index 6ecae1409c..5184c1c3ae 100644 --- a/api/grpcserver/grpcserver_test.go +++ b/api/grpcserver/grpcserver_test.go @@ -93,7 +93,6 @@ var ( meshAPIMock = &MeshAPIMock{} conStateAPI = &ConStateAPIMock{ returnTx: make(map[types.TransactionID]*types.Transaction), - layerApplied: make(map[types.TransactionID]*types.LayerID), balances: make(map[types.Address]*big.Int), nonces: make(map[types.Address]uint64), poolByAddress: make(map[types.Address]types.TransactionID), @@ -279,10 +278,9 @@ func (m *MeshAPIMock) MeshHash(types.LayerID) (types.Hash32, error) { } type ConStateAPIMock struct { - returnTx map[types.TransactionID]*types.Transaction - layerApplied map[types.TransactionID]*types.LayerID - balances map[types.Address]*big.Int - nonces map[types.Address]uint64 + returnTx map[types.TransactionID]*types.Transaction + balances map[types.Address]*big.Int + nonces map[types.Address]uint64 // In the real txs.txPool struct, there are multiple data structures and they're more complex, // but we just mock a very simple use case here and only store some of these data diff --git a/api/grpcserver/post_info_service.go b/api/grpcserver/post_info_service.go index 372971d65e..b5c552de4c 100644 --- a/api/grpcserver/post_info_service.go +++ b/api/grpcserver/post_info_service.go @@ -5,7 +5,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" pb "github.com/spacemeshos/api/release/go/spacemesh/v1" - "go.uber.org/zap" "google.golang.org/grpc" "github.com/spacemeshos/go-spacemesh/common/types" @@ -18,8 +17,6 @@ var statusMap map[types.PostState]pb.PostState_State = map[types.PostState]pb.Po // PostInfoService provides information about connected PostServices. type PostInfoService struct { - log *zap.Logger - states postState } @@ -38,9 +35,8 @@ func (s *PostInfoService) String() string { } // NewPostInfoService creates a new instance of the post info grpc service. -func NewPostInfoService(log *zap.Logger, states postState) *PostInfoService { +func NewPostInfoService(states postState) *PostInfoService { return &PostInfoService{ - log: log, states: states, } } diff --git a/api/grpcserver/post_info_service_test.go b/api/grpcserver/post_info_service_test.go index 04ea43d578..319e5b413b 100644 --- a/api/grpcserver/post_info_service_test.go +++ b/api/grpcserver/post_info_service_test.go @@ -7,7 +7,6 @@ import ( pb "github.com/spacemeshos/api/release/go/spacemesh/v1" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" - "go.uber.org/zap/zaptest" "github.com/spacemeshos/go-spacemesh/common/types" ) @@ -33,9 +32,8 @@ func (i idMock) Name() string { } func TestPostInfoService(t *testing.T) { - log := zaptest.NewLogger(t) mpostStates := NewMockpostState(gomock.NewController(t)) - svc := NewPostInfoService(log, mpostStates) + svc := NewPostInfoService(mpostStates) cfg, cleanup := launchServer(t, svc) t.Cleanup(cleanup) diff --git a/api/grpcserver/transaction_service.go b/api/grpcserver/transaction_service.go index 3540dd1f8b..16084e81f1 100644 --- a/api/grpcserver/transaction_service.go +++ b/api/grpcserver/transaction_service.go @@ -153,7 +153,7 @@ func (s *TransactionService) TransactionsState( _ context.Context, in *pb.TransactionsStateRequest, ) (*pb.TransactionsStateResponse, error) { - if in.TransactionId == nil || len(in.TransactionId) == 0 { + if len(in.TransactionId) == 0 { return nil, status.Error(codes.InvalidArgument, "`TransactionId` must include one or more transaction IDs") } @@ -190,7 +190,7 @@ func (s *TransactionService) TransactionsStateStream( in *pb.TransactionsStateStreamRequest, stream pb.TransactionService_TransactionsStateStreamServer, ) error { - if in.TransactionId == nil || len(in.TransactionId) == 0 { + if len(in.TransactionId) == 0 { return status.Error(codes.InvalidArgument, "`TransactionId` must include one or more transaction IDs") } diff --git a/api/grpcserver/v2alpha1/layer.go b/api/grpcserver/v2alpha1/layer.go index 590cca84ff..5a143e0ba6 100644 --- a/api/grpcserver/v2alpha1/layer.go +++ b/api/grpcserver/v2alpha1/layer.go @@ -45,10 +45,9 @@ func (s *LayerStreamService) Stream( request *spacemeshv2alpha1.LayerStreamRequest, stream spacemeshv2alpha1.LayerStreamService_StreamServer, ) error { - ctx := stream.Context() var sub *events.BufferedSubscription[events.LayerUpdate] if request.Watch { - matcher := layersMatcher{request, ctx} + matcher := layersMatcher{request} var err error sub, err = events.SubscribeMatched(matcher.match) if err != nil { @@ -305,7 +304,6 @@ func toLayer(layer *layers.Layer) *spacemeshv2alpha1.Layer { type layersMatcher struct { *spacemeshv2alpha1.LayerStreamRequest - ctx context.Context } func (m *layersMatcher) match(l *events.LayerUpdate) bool { diff --git a/api/grpcserver/v2alpha1/layer_test.go b/api/grpcserver/v2alpha1/layer_test.go index 9186c0efc1..de4b8eff59 100644 --- a/api/grpcserver/v2alpha1/layer_test.go +++ b/api/grpcserver/v2alpha1/layer_test.go @@ -200,7 +200,7 @@ func TestLayerStreamService_Stream(t *testing.T) { } require.NoError(t, events.ReportLayerUpdate(lu)) - matcher := layersMatcher{tc.request, context.Background()} + matcher := layersMatcher{tc.request} if matcher.match(&lu) { expect = append(expect, &rst) } diff --git a/api/grpcserver/v2alpha1/transaction.go b/api/grpcserver/v2alpha1/transaction.go index 465b823613..54f0ccb811 100644 --- a/api/grpcserver/v2alpha1/transaction.go +++ b/api/grpcserver/v2alpha1/transaction.go @@ -49,13 +49,11 @@ type transactionValidator interface { VerifyAndCacheTx(context.Context, []byte) error } -func NewTransactionStreamService(db sql.Executor) *TransactionStreamService { - return &TransactionStreamService{db: db} +func NewTransactionStreamService() *TransactionStreamService { + return &TransactionStreamService{} } -type TransactionStreamService struct { - db sql.Executor -} +type TransactionStreamService struct{} func (s *TransactionStreamService) RegisterService(server *grpc.Server) { spacemeshv2alpha1.RegisterTransactionStreamServiceServer(server, s) diff --git a/beacon/beacon.go b/beacon/beacon.go index 7175ede9a7..6a71b2064c 100644 --- a/beacon/beacon.go +++ b/beacon/beacon.go @@ -662,7 +662,7 @@ func (pd *ProtocolDriver) initEpochStateIfNotPresent(logger *zap.Logger, target ) checker := createProposalChecker(logger, pd.config, w1, w1+w2) - pd.states[target] = newState(logger, pd.config, active, epochWeight, miners, checker) + pd.states[target] = newState(logger, active, epochWeight, miners, checker) return pd.states[target], nil } diff --git a/beacon/beacon_test.go b/beacon/beacon_test.go index 1ef3c134d5..34397a5b57 100644 --- a/beacon/beacon_test.go +++ b/beacon/beacon_test.go @@ -442,7 +442,7 @@ func TestBeaconWithMetrics(t *testing.T) { tpd.recordBeacon(thisEpoch, &b, beacon2, fixed.New64(1)) count := layer.OrdinalInEpoch() + 1 - //nolint:lll + // nolint:lll expected := fmt.Sprintf(` # HELP spacemesh_beacons_beacon_observed_total Number of beacons collected from blocks for each epoch and value # TYPE spacemesh_beacons_beacon_observed_total counter @@ -460,7 +460,7 @@ func TestBeaconWithMetrics(t *testing.T) { require.NoError(t, err) weight := layer.OrdinalInEpoch() + 1 - //nolint:lll + // nolint:lll expected = fmt.Sprintf(` # HELP spacemesh_beacons_beacon_observed_weight Weight of beacons collected from blocks for each epoch and value # TYPE spacemesh_beacons_beacon_observed_weight counter @@ -984,7 +984,7 @@ func TestBeacon_atxThreshold(t *testing.T) { kappa := 40 q := big.NewRat(1, 3) - //nolint:lll + // nolint:lll tt := []struct { name string w int diff --git a/beacon/handlers_test.go b/beacon/handlers_test.go index 875c430a3c..ed44e4c1b2 100644 --- a/beacon/handlers_test.go +++ b/beacon/handlers_test.go @@ -51,7 +51,7 @@ func createEpochState( tb.Helper() pd.mu.Lock() defer pd.mu.Unlock() - pd.states[epoch] = newState(pd.logger, pd.config, nil, epochWeight, minerAtxs, checker) + pd.states[epoch] = newState(pd.logger, nil, epochWeight, minerAtxs, checker) return pd.states[epoch] } diff --git a/beacon/state.go b/beacon/state.go index 9f3b2aba6b..efe36b90ed 100644 --- a/beacon/state.go +++ b/beacon/state.go @@ -17,9 +17,8 @@ type minerInfo struct { } // state does the data management for epoch specific data for the protocol. -// not thread-safe. it relies on ProtocolDriver's thread-safety mechanism. +// Not thread-safe. It relies on ProtocolDriver's thread-safety mechanism. type state struct { - cfg Config logger *zap.Logger active map[types.NodeID]participant epochWeight uint64 @@ -39,14 +38,12 @@ type state struct { func newState( logger *zap.Logger, - cfg Config, active map[types.NodeID]participant, epochWeight uint64, miners map[types.NodeID]*minerInfo, checker eligibilityChecker, ) *state { return &state{ - cfg: cfg, logger: logger, epochWeight: epochWeight, active: active, diff --git a/blocks/certifier.go b/blocks/certifier.go index b3461a98fc..0931b022ec 100644 --- a/blocks/certifier.go +++ b/blocks/certifier.go @@ -93,8 +93,6 @@ type Certifier struct { mu sync.Mutex certifyMsgs map[types.LayerID]map[types.BlockID]*certInfo certCount map[types.EpochID]int - - collector *collector } // NewCertifier creates new block certifier. @@ -126,8 +124,6 @@ func NewCertifier( for _, opt := range opts { opt(c) } - c.collector = newCollector(c) - return c } @@ -146,7 +142,8 @@ func (c *Certifier) Register(sig *signing.EdSigner) { // Start starts the background goroutine for periodic pruning. func (c *Certifier) Start(ctx context.Context) { c.once.Do(func() { - ctx, c.stop = context.WithCancel(ctx) + // TODO(mafa): fix this + ctx, c.stop = context.WithCancel(ctx) // nolint:fatcontext c.eg.Go(func() error { return c.run(ctx) }) diff --git a/blocks/generator.go b/blocks/generator.go index 1c7ab6b196..43fb0ef6dd 100644 --- a/blocks/generator.go +++ b/blocks/generator.go @@ -116,7 +116,8 @@ func NewGenerator( // Start starts listening to hare output. func (g *Generator) Start(ctx context.Context) { g.once.Do(func() { - ctx, g.stop = context.WithCancel(ctx) + // TODO(mafa): fix this + ctx, g.stop = context.WithCancel(ctx) // nolint:fatcontext g.eg.Go(func() error { return g.run(ctx) }) diff --git a/blocks/metrics.go b/blocks/metrics.go index 2a818408bc..177656a59e 100644 --- a/blocks/metrics.go +++ b/blocks/metrics.go @@ -1,15 +1,13 @@ package blocks import ( - "github.com/prometheus/client_golang/prometheus" - "github.com/spacemeshos/go-spacemesh/metrics" ) const ( namespace = "blocks" - // labels for block generation. + // Labels for block generation. failFetch = "fail_proposal" failGen = "fail_block" internalErr = "fail_error" @@ -31,41 +29,3 @@ var ( failGenCnt = blockGenCount.WithLabelValues(failGen) failErrCnt = blockGenCount.WithLabelValues(internalErr) ) - -type collector struct { - *Certifier - epochCertCount *prometheus.Desc -} - -func newCollector(certifier *Certifier) *collector { - c := &collector{ - Certifier: certifier, - epochCertCount: prometheus.NewDesc( - prometheus.BuildFQName(metrics.Namespace, namespace, "cert_count"), - "number of certificate created/synced in each epoch", - []string{labelEpoch}, - nil, - ), - } - if err := prometheus.Register(c); err != nil { - _, ok := err.(prometheus.AlreadyRegisteredError) - if !ok { - panic(err) - } - } - return c -} - -func (c *collector) Stop() { - prometheus.Unregister(c) -} - -func (c *collector) Describe(ch chan<- *prometheus.Desc) { - ch <- c.epochCertCount -} - -func (c *collector) Collect(ch chan<- prometheus.Metric) { - for epoch, cnt := range c.CertCount() { - ch <- prometheus.MustNewConstMetric(c.epochCertCount, prometheus.CounterValue, float64(cnt), epoch.String()) - } -} diff --git a/bootstrap.Dockerfile b/bootstrap.Dockerfile index 25a4524d46..dd7dab83d4 100644 --- a/bootstrap.Dockerfile +++ b/bootstrap.Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22 as builder +FROM golang:1.23 as builder WORKDIR /src diff --git a/cmd/bootstrapper/server.go b/cmd/bootstrapper/server.go index a2c737451e..26d40d64b4 100644 --- a/cmd/bootstrapper/server.go +++ b/cmd/bootstrapper/server.go @@ -40,7 +40,7 @@ func (np *NetworkParam) updateActiveSetTime(targetEpoch types.EpochID) time.Time } // Server is used to serve bootstrap update data during systest. NOT intended for production use. -// in particular, it does not protect against data loss and will serve whatever is the latest +// In particular, it does not protect against data loss and will serve whatever is the latest // one on disk, even tho it's for an old epoch. type Server struct { *http.Server @@ -198,8 +198,8 @@ func (s *Server) genWithRetry(ctx context.Context, epoch types.EpochID, maxRetri } } -// in systests, we want to be sure the nodes use the fallback data unconditionally. -// use a fixed known value for beacon to be sure that fallback is used during testing. +// In systests, we want to be sure the nodes use the fallback data unconditionally. +// Use a fixed known value for beacon to be sure that fallback is used during testing. func epochBeacon(epoch types.EpochID) types.Beacon { b := make([]byte, types.BeaconSize) binary.LittleEndian.PutUint32(b, uint32(epoch)) diff --git a/codec/codec.go b/codec/codec.go index a5b4cbbafc..3ef3484ba0 100644 --- a/codec/codec.go +++ b/codec/codec.go @@ -29,7 +29,7 @@ func DecodeFrom(r io.Reader, value Decodable) (int, error) { } // TODO(dshulyak) this is a temporary solution to improve encoder allocations. -// if this will stay it must be changed to one of the: +// If this will stay it must be changed to one of the: // - use buffer with allocations that can be adjusted using stats // - use multiple buffers that increase in size (e.g. 16, 32, 64, 128 bytes). var encoderPool = sync.Pool{ diff --git a/common/types/activation.go b/common/types/activation.go index b1bd93016d..ba7c684bf3 100644 --- a/common/types/activation.go +++ b/common/types/activation.go @@ -203,7 +203,7 @@ func (atx *ActivationTx) TargetEpoch() EpochID { } // Golden returns true if atx is from a checkpoint snapshot. -// a golden ATX is not verifiable, and is only allowed to be prev atx or positioning atx. +// A golden ATX is not verifiable, and is only allowed to be prev atx or positioning atx. func (atx *ActivationTx) Golden() bool { return atx.golden } diff --git a/common/types/ballot.go b/common/types/ballot.go index 71883e59fc..8eb9a5aa76 100644 --- a/common/types/ballot.go +++ b/common/types/ballot.go @@ -109,7 +109,7 @@ func (m *BallotMetadata) MarshalLogObject(encoder zapcore.ObjectEncoder) error { return nil } -// InnerBallot contains all info about a smeshers votes on the mesh history. this structure is +// InnerBallot contains all info about a smeshers votes on the mesh history. This structure is // serialized and signed to produce the signature in Ballot. type InnerBallot struct { Layer LayerID @@ -128,7 +128,7 @@ type InnerBallot struct { // Votes is for encoding local votes to send over the wire. // -// a smesher creates votes in the following steps: +// A smesher creates votes in the following steps: // - select a Ballot in the past as a base Ballot // - calculate the opinion difference on history between the smesher and the base Ballot // - encode the opinion difference in 3 list: @@ -249,7 +249,7 @@ type EpochData struct { } // Initialize calculates and sets the Ballot's cached ballotID and smesherID. -// this should be called once all the other fields of the Ballot are set. +// This should be called once all the other fields of the Ballot are set. func (b *Ballot) Initialize() error { if b.ID() != EmptyBallotID { return errors.New("ballot already initialized") diff --git a/common/types/block.go b/common/types/block.go index 7430467eea..25b69ca300 100644 --- a/common/types/block.go +++ b/common/types/block.go @@ -17,7 +17,7 @@ import ( const ( // BlockIDSize in bytes. // FIXME(dshulyak) why do we cast to hash32 when returning bytes? - // probably required for fetching by hash between peers. + // Probably required for fetching by hash between peers. BlockIDSize = Hash32Length ) @@ -91,7 +91,7 @@ type InnerBlock struct { // RatNum represents a rational number with the numerator and denominator. // note: RatNum aims to be a generic representation of a rational number and parse-able by // different programming languages. -// for doing math around weight inside go-spacemesh codebase, use util.Weight. +// For doing math around weight inside go-spacemesh codebase, use util.Weight. type RatNum struct { Num, Denom uint64 } diff --git a/common/types/eligibility.go b/common/types/eligibility.go index 505596b530..b38428b3ad 100644 --- a/common/types/eligibility.go +++ b/common/types/eligibility.go @@ -48,7 +48,7 @@ func (e *HareEligibility) MarshalLogObject(encoder zapcore.ObjectEncoder) error } // VotingEligibility includes the required values that, along with the smeshers VRF public key, -// allow non-interactive voting eligibility validation. this proof provides eligibility for both voting and +// allow non-interactive voting eligibility validation. This proof provides eligibility for both voting and // making proposals. type VotingEligibility struct { // the counter value used to generate this eligibility proof. if the value of J is 3, this is the smeshers diff --git a/common/types/layer.go b/common/types/layer.go index 1f36578f64..f2f29bf430 100644 --- a/common/types/layer.go +++ b/common/types/layer.go @@ -42,7 +42,7 @@ func FirstEffectiveGenesis() LayerID { } // GetEffectiveGenesis returns the last layer of genesis. -// this value can change after a checkpoint recovery. +// This value can change after a checkpoint recovery. func GetEffectiveGenesis() LayerID { return LayerID(atomic.LoadUint32(&effectiveGenesis)) } diff --git a/common/types/proposal.go b/common/types/proposal.go index ae7aea7aab..36e6a988ec 100644 --- a/common/types/proposal.go +++ b/common/types/proposal.go @@ -16,7 +16,7 @@ import ( const ( // ProposalIDSize in bytes. // FIXME(dshulyak) why do we cast to hash32 when returning bytes? - // probably required for fetching by hash between peers. + // Probably required for fetching by hash between peers. ProposalIDSize = Hash32Length ) @@ -51,7 +51,7 @@ func (id *ProposalID) DecodeScale(d *scale.Decoder) (int, error) { } // Proposal contains the smesher's signed content proposal for a given layer and vote on the mesh history. -// Proposal is ephemeral and will be discarded after the unified content block is created. the Ballot within +// Proposal is ephemeral and will be discarded after the unified content block is created. The Ballot within // the Proposal will remain in the mesh. type Proposal struct { // the content proposal for a given layer and the votes on the mesh history @@ -70,7 +70,7 @@ func (p Proposal) Equal(other Proposal) bool { } // InnerProposal contains a smesher's content proposal for layer and its votes on the mesh history. -// this structure is serialized and signed to produce the signature in Proposal. +// This structure is serialized and signed to produce the signature in Proposal. type InnerProposal struct { // smesher's votes on the mesh history Ballot @@ -85,7 +85,7 @@ type InnerProposal struct { } // Initialize calculates and sets the Proposal's cached proposalID. -// this should be called once all the other fields of the Proposal are set. +// This should be called once all the other fields of the Proposal are set. func (p *Proposal) Initialize() error { if p.proposalID != EmptyProposalID { return errors.New("proposal already initialized") diff --git a/common/types/transaction_result.go b/common/types/transaction_result.go index 8cf9724610..7154484b9a 100644 --- a/common/types/transaction_result.go +++ b/common/types/transaction_result.go @@ -12,7 +12,7 @@ const ( TransactionSuccess TransactionStatus = iota // TransactionFailure is a status for failed but consumed transaction. TransactionFailure - // TODO(dshulyak) what about TransactionSkipped? we shouldn't store such state + // TODO(dshulyak) what about TransactionSkipped? We shouldn't store such state // but it might be useful to stream it. ) diff --git a/config/presets/standalone.go b/config/presets/standalone.go index b49b3860a8..95eb1dbcd7 100644 --- a/config/presets/standalone.go +++ b/config/presets/standalone.go @@ -6,7 +6,7 @@ import ( "path/filepath" "time" - "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" "github.com/spacemeshos/post/initialization" "github.com/spacemeshos/go-spacemesh/activation" @@ -94,8 +94,8 @@ func standalone() config.Config { conf.API.PrivateListener = "127.0.0.1:10093" conf.API.PostListener = "127.0.0.1:0" - addr, _ := multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/17513") - conf.P2P.Listen = []multiaddr.Multiaddr{addr} + addr, _ := ma.NewMultiaddr("/ip4/0.0.0.0/tcp/17513") + conf.P2P.Listen = []ma.Multiaddr{addr} conf.P2P.AdvertiseAddress = conf.P2P.Listen return conf diff --git a/datastore/store.go b/datastore/store.go index aee925cb02..f1316e5e68 100644 --- a/datastore/store.go +++ b/datastore/store.go @@ -32,7 +32,6 @@ type VrfNonceKey struct { // CachedDB is simply a database injected with cache. type CachedDB struct { sql.Database - logger *zap.Logger // cache is optional in tests. It MUST be set for the 'App' // for properly checking malfeasance. @@ -105,7 +104,6 @@ func NewCachedDB(db sql.StateDatabase, lg *zap.Logger, opts ...Opt) *CachedDB { return &CachedDB{ Database: db, - logger: lg, atxsdata: o.atxsdata, atxCache: atxHdrCache, malfeasanceCache: malfeasanceCache, diff --git a/fetch/fetch.go b/fetch/fetch.go index 967dbfac67..30447be10a 100644 --- a/fetch/fetch.go +++ b/fetch/fetch.go @@ -204,9 +204,10 @@ func randomPeer(peers []p2p.Peer) p2p.Peer { type Option func(*Fetch) // WithContext configures the shutdown context for the fetcher. -func WithContext(c context.Context) Option { +func WithContext(ctx context.Context) Option { return func(f *Fetch) { - f.shutdownCtx, f.cancel = context.WithCancel(c) + // TODO(mafa): fix this + f.shutdownCtx, f.cancel = context.WithCancel(ctx) // nolint:fatcontext } } diff --git a/fetch/mesh_data.go b/fetch/mesh_data.go index f7961cd769..ad271f307b 100644 --- a/fetch/mesh_data.go +++ b/fetch/mesh_data.go @@ -24,7 +24,7 @@ import ( var errBadRequest = errors.New("invalid request") -// GetAtxs gets the data for given atx IDs and validates them. returns an error if at least one ATX cannot be fetched. +// GetAtxs gets the data for given atx IDs and validates them. Returns an error if at least one ATX cannot be fetched. func (f *Fetch) GetAtxs(ctx context.Context, ids []types.ATXID, opts ...system.GetAtxOpt) error { if len(ids) == 0 { return nil diff --git a/fetch/p2p_test.go b/fetch/p2p_test.go index c5827d2c85..5ef6270c8f 100644 --- a/fetch/p2p_test.go +++ b/fetch/p2p_test.go @@ -31,14 +31,14 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/transactions" ) +// nolint:unused type blobKey struct { kind string id types.Hash32 } type testP2PFetch struct { - t *testing.T - clientDB sql.StateDatabase + t *testing.T // client proposals clientPDB *store.Store clientCDB *datastore.CachedDB @@ -115,7 +115,6 @@ func createP2PFetch( serverDB := statesql.InMemory(sqlOpts...) tpf := &testP2PFetch{ t: t, - clientDB: clientDB, clientPDB: store.New(store.WithLogger(lg)), clientCDB: datastore.NewCachedDB(clientDB, lg), serverID: serverHost.ID(), diff --git a/fetch/wire_types.go b/fetch/wire_types.go index 964d491289..14c8eeafe3 100644 --- a/fetch/wire_types.go +++ b/fetch/wire_types.go @@ -47,7 +47,7 @@ type RequestBatch struct { Requests []RequestMessage `scale:"max=100"` } -// ResponseBatch is the response struct send for a RequestBatch. the ResponseBatch ID must be the same +// ResponseBatch is the response struct send for a RequestBatch. The ResponseBatch ID must be the same // as stated in RequestBatch even if not all Data is present. type ResponseBatch struct { ID types.Hash32 diff --git a/genvm/templates/multisig/handler.go b/genvm/templates/multisig/handler.go index 05e6bd0b22..149bb733d8 100644 --- a/genvm/templates/multisig/handler.go +++ b/genvm/templates/multisig/handler.go @@ -17,9 +17,7 @@ func init() { // Register template. func Register(registry *registry.Registry) { - registry.Register(TemplateAddress, &handler{ - address: TemplateAddress, - }) + registry.Register(TemplateAddress, &handler{}) } var ( @@ -28,13 +26,11 @@ var ( ) // NewHandler instantiates multisig handler with a particular configuration. -func NewHandler(address core.Address) core.Handler { - return &handler{address: address} +func NewHandler() core.Handler { + return &handler{} } -type handler struct { - address core.Address -} +type handler struct{} // Parse header and arguments. func (h *handler) Parse(method uint8, decoder *scale.Decoder) (output core.ParseOutput, err error) { diff --git a/genvm/templates/vesting/handler.go b/genvm/templates/vesting/handler.go index b9ca5fe26c..3cc6389f50 100644 --- a/genvm/templates/vesting/handler.go +++ b/genvm/templates/vesting/handler.go @@ -21,7 +21,7 @@ const MethodDrainVault = 17 // Register vesting templates. func Register(reg *registry.Registry) { reg.Register(TemplateAddress, &handler{ - multisig: multisig.NewHandler(TemplateAddress), + multisig: multisig.NewHandler(), }) } @@ -34,7 +34,7 @@ func (h *handler) Parse(method uint8, decoder *scale.Decoder) (output core.Parse return h.multisig.Parse(method, decoder) } -// New instatiates vesting state, note that the state is the same as multisig. +// New instantiates vesting state, note that the state is the same as multisig. // The difference is that vesting supports one more transaction type. func (h *handler) New(args any) (core.Template, error) { template, err := h.multisig.New(args) diff --git a/go.mod b/go.mod index eac42872ab..175655fe1a 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/spacemeshos/go-spacemesh -go 1.22.4 +go 1.23.2 require ( cloud.google.com/go/storage v1.43.0 github.com/ALTree/bigfloat v0.2.0 - github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068 + github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2 github.com/cosmos/btcutil v1.0.5 github.com/go-llsqlite/crawshaw v0.5.5 github.com/gofrs/flock v0.12.1 @@ -38,7 +38,7 @@ require ( github.com/rs/cors v1.11.1 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/seehuhn/mt19937 v1.0.0 - github.com/slok/go-http-metrics v0.12.0 + github.com/slok/go-http-metrics v0.13.0 github.com/spacemeshos/api/release/go v1.54.0 github.com/spacemeshos/economics v0.1.3 github.com/spacemeshos/fixed v0.1.1 @@ -58,8 +58,8 @@ require ( golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/sync v0.8.0 golang.org/x/time v0.6.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 - google.golang.org/grpc v1.67.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f + google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.34.2 k8s.io/api v0.31.1 k8s.io/apimachinery v0.31.1 @@ -89,7 +89,7 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/elastic/gosigar v0.14.3 // indirect - github.com/emicklei/go-restful/v3 v3.12.0 // indirect + github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -177,7 +177,7 @@ require ( github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pion/datachannel v1.5.8 // indirect github.com/pion/dtls/v2 v2.2.12 // indirect github.com/pion/ice/v2 v2.3.34 // indirect diff --git a/go.sum b/go.sum index 6941cbb066..ee1d228f65 100644 --- a/go.sum +++ b/go.sum @@ -60,8 +60,8 @@ github.com/c0mm4nd/go-ripemd v0.0.0-20200326052756-bd1759ad7d10/go.mod h1:mYPR+a github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068 h1:h+CQlN3KrlaQ5XU+k0R9jxyV7rgM4FTpPHXQ6JWhGJM= -github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240920071034-f8a0da9e5068/go.mod h1:x11iCbZV6hzzSQWMq610B6Wl5Lg1dhwqcVfeiWQQnQQ= +github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2 h1:0oF8rdbeIhRy8Iu453oIgkvhPj8bNXldI3QnznkNg4o= +github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2/go.mod h1:x11iCbZV6hzzSQWMq610B6Wl5Lg1dhwqcVfeiWQQnQQ= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -97,8 +97,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/uo= github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk= -github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= +github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -472,8 +472,8 @@ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYr github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pion/datachannel v1.5.8 h1:ph1P1NsGkazkjrvyMfhRBUAWMxugJjq2HfQifaOoSNo= github.com/pion/datachannel v1.5.8/go.mod h1:PgmdpoaNBLX9HNzNClmdki4DYW5JtI7Yibu8QzbL3tI= @@ -591,8 +591,8 @@ github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYED github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/slok/go-http-metrics v0.12.0 h1:mAb7hrX4gB4ItU6NkFoKYdBslafg3o60/HbGBRsKaG8= -github.com/slok/go-http-metrics v0.12.0/go.mod h1:Ee/mdT9BYvGrlGzlClkK05pP2hRHmVbRF9dtUVS8LNA= +github.com/slok/go-http-metrics v0.13.0 h1:lQDyJJx9wKhmbliyUsZ2l6peGnXRHjsjoqPt5VYzcP8= +github.com/slok/go-http-metrics v0.13.0/go.mod h1:HIr7t/HbN2sJaunvnt9wKP9xoBBVZFo1/KiHU3b0w+4= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= @@ -909,8 +909,8 @@ google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d h1:PksQg4dV6Sem3/H google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:s7iA721uChleev562UJO2OYB0PPT9CMFjV+Ce7VJH5M= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61 h1:N9BgCIAUvn/M+p4NJccWPWb3BWh88+zyL0ll9HgbEeM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240924160255-9d4c2d233b61/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f h1:cUMEy+8oS78BWIH9OWazBkzbr090Od9tWBNtZHkOhf0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -920,8 +920,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= -google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/hare3/eligibility/oracle.go b/hare3/eligibility/oracle.go index c33cf0c50b..d72693fa46 100644 --- a/hare3/eligibility/oracle.go +++ b/hare3/eligibility/oracle.go @@ -92,13 +92,12 @@ type Oracle struct { // until graded oracle is implemented synced bool - beacons system.BeaconGetter - atxsdata *atxsdata.Data - db sql.Executor - vrfVerifier vrfVerifier - layersPerEpoch uint32 - cfg Config - log *zap.Logger + beacons system.BeaconGetter + atxsdata *atxsdata.Data + db sql.Executor + vrfVerifier vrfVerifier + cfg Config + log *zap.Logger } type Opt func(*Oracle) @@ -129,15 +128,14 @@ func New( panic("failed to create lru cache for active set" + err.Error()) } oracle := &Oracle{ - beacons: beacons, - db: db, - atxsdata: atxsdata, - vrfVerifier: vrfVerifier, - layersPerEpoch: layersPerEpoch, - activesCache: activesCache, - fallback: map[types.EpochID][]types.ATXID{}, - cfg: DefaultConfig(), - log: zap.NewNop(), + beacons: beacons, + db: db, + atxsdata: atxsdata, + vrfVerifier: vrfVerifier, + activesCache: activesCache, + fallback: map[types.EpochID][]types.ATXID{}, + cfg: DefaultConfig(), + log: zap.NewNop(), } for _, opt := range opts { opt(oracle) diff --git a/hare3/hare_test.go b/hare3/hare_test.go index 7923bdd1fb..8392ecc5d2 100644 --- a/hare3/hare_test.go +++ b/hare3/hare_test.go @@ -116,7 +116,6 @@ type node struct { nclock *testNodeClock signer *signing.EdSigner registered []*signing.EdSigner - vrfsigner *signing.VRFSigner atx *types.ActivationTx oracle *eligibility.Oracle db sql.StateDatabase @@ -140,13 +139,11 @@ func (n *node) withSigner() *node { signer, err := signing.NewEdSigner(signing.WithKeyFromRand(n.t.rng)) require.NoError(n.t, err) n.signer = signer - n.vrfsigner = signer.VRFSigner() return n } func (n *node) reuseSigner(signer *signing.EdSigner) *node { n.signer = signer - n.vrfsigner = signer.VRFSigner() return n } @@ -281,7 +278,7 @@ func withProposals(fraction float64) clusterOpt { } // withSigners creates N signers in addition to regular active nodes. -// this signers will be partitioned in fair fashion across regular active nodes. +// This signers will be partitioned in fair fashion across regular active nodes. func withSigners(n int) clusterOpt { return func(cluster *lockstepCluster) { cluster.signersCount = n diff --git a/hare3/malfeasance_test.go b/hare3/malfeasance_test.go index 0382ad3741..4764b31277 100644 --- a/hare3/malfeasance_test.go +++ b/hare3/malfeasance_test.go @@ -22,13 +22,12 @@ import ( type testMalfeasanceHandler struct { *MalfeasanceHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase + db sql.StateDatabase } func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { db := statesql.InMemoryTest(tb) - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, _ := observer.New(zapcore.WarnLevel) logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) @@ -40,8 +39,7 @@ func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { return &testMalfeasanceHandler{ MalfeasanceHandler: h, - observedLogs: observedLogs, - db: db, + db: db, } } diff --git a/hare3/protocol.go b/hare3/protocol.go index 7bd3157edd..3d2e28ce63 100644 --- a/hare3/protocol.go +++ b/hare3/protocol.go @@ -340,7 +340,7 @@ type gossipInput struct { otherReceived *IterRound } -// Protocol 1. graded-gossip. page 10. +// Protocol 1. Graded-gossip. Page 10. type gossip struct { threshold uint16 state map[messageKey]*gossipInput @@ -382,7 +382,7 @@ type gset struct { smallest types.VrfSignature } -// Protocol 2. gradecast. page 13. +// Protocol 2. Gradecast. Page 13. func (g *gossip) gradecast(target IterRound) []gset { // unlike paper we use 5-graded gossip for gradecast as well var rst []gset @@ -433,8 +433,8 @@ func tallyProposals(all map[types.ProposalID]proposalTally, inp *gossipInput) { } } -// Protocol 3. thresh-gossip. Page 15. -// output returns union of sorted proposals received +// Protocol 3. Thresh-gossip. Page 15. +// Output returns union of sorted proposals received // in the given round with minimal specified grade. func (g *gossip) thresholdGossip(filter IterRound, grade grade) []types.ProposalID { rst := thresholdGossip(thresholdTallies(g.state, filter, grade, tallyProposals), g.threshold) diff --git a/hare4/eligibility/oracle.go b/hare4/eligibility/oracle.go index 701d8da800..67b2de7afa 100644 --- a/hare4/eligibility/oracle.go +++ b/hare4/eligibility/oracle.go @@ -92,13 +92,12 @@ type Oracle struct { // until graded oracle is implemented synced bool - beacons system.BeaconGetter - atxsdata *atxsdata.Data - db sql.Executor - vrfVerifier vrfVerifier - layersPerEpoch uint32 - cfg Config - log *zap.Logger + beacons system.BeaconGetter + atxsdata *atxsdata.Data + db sql.Executor + vrfVerifier vrfVerifier + cfg Config + log *zap.Logger } type Opt func(*Oracle) @@ -129,15 +128,14 @@ func New( panic("failed to create lru cache for active set" + err.Error()) } oracle := &Oracle{ - beacons: beacons, - db: db, - atxsdata: atxsdata, - vrfVerifier: vrfVerifier, - layersPerEpoch: layersPerEpoch, - activesCache: activesCache, - fallback: map[types.EpochID][]types.ATXID{}, - cfg: DefaultConfig(), - log: zap.NewNop(), + beacons: beacons, + db: db, + atxsdata: atxsdata, + vrfVerifier: vrfVerifier, + activesCache: activesCache, + fallback: map[types.EpochID][]types.ATXID{}, + cfg: DefaultConfig(), + log: zap.NewNop(), } for _, opt := range opts { opt(oracle) diff --git a/hare4/hare_test.go b/hare4/hare_test.go index abc9005b51..d3bea768dd 100644 --- a/hare4/hare_test.go +++ b/hare4/hare_test.go @@ -120,7 +120,6 @@ type node struct { nclock *testNodeClock signer *signing.EdSigner registered []*signing.EdSigner - vrfsigner *signing.VRFSigner atx *types.ActivationTx oracle *eligibility.Oracle db sql.StateDatabase @@ -146,13 +145,11 @@ func (n *node) withSigner() *node { signer, err := signing.NewEdSigner(signing.WithKeyFromRand(n.t.rng)) require.NoError(n.t, err) n.signer = signer - n.vrfsigner = signer.VRFSigner() return n } func (n *node) reuseSigner(signer *signing.EdSigner) *node { n.signer = signer - n.vrfsigner = signer.VRFSigner() return n } @@ -317,7 +314,7 @@ func withProposals(fraction float64) clusterOpt { } // withSigners creates N signers in addition to regular active nodes. -// this signers will be partitioned in fair fashion across regular active nodes. +// This signers will be partitioned in fair fashion across regular active nodes. func withSigners(n int) clusterOpt { return func(cluster *lockstepCluster) { cluster.signersCount = n diff --git a/hare4/malfeasance_test.go b/hare4/malfeasance_test.go index 6611e36ea5..1147700b3d 100644 --- a/hare4/malfeasance_test.go +++ b/hare4/malfeasance_test.go @@ -22,13 +22,12 @@ import ( type testMalfeasanceHandler struct { *MalfeasanceHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase + db sql.StateDatabase } func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, _ := observer.New(zapcore.WarnLevel) logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) @@ -40,8 +39,7 @@ func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { return &testMalfeasanceHandler{ MalfeasanceHandler: h, - observedLogs: observedLogs, - db: db, + db: db, } } diff --git a/hare4/protocol.go b/hare4/protocol.go index 34b58f1d86..5ddb39c847 100644 --- a/hare4/protocol.go +++ b/hare4/protocol.go @@ -341,7 +341,7 @@ type gossipInput struct { otherReceived *IterRound } -// Protocol 1. graded-gossip. page 10. +// Protocol 1. Graded-gossip. Page 10. type gossip struct { threshold uint16 state map[messageKey]*gossipInput @@ -383,7 +383,7 @@ type gset struct { smallest types.VrfSignature } -// Protocol 2. gradecast. page 13. +// Protocol 2. Gradecast. Page 13. func (g *gossip) gradecast(target IterRound) []gset { // unlike paper we use 5-graded gossip for gradecast as well var rst []gset @@ -434,8 +434,8 @@ func tallyProposals(all map[types.ProposalID]proposalTally, inp *gossipInput) { } } -// Protocol 3. thresh-gossip. Page 15. -// output returns union of sorted proposals received +// Protocol 3. Thresh-gossip. Page 15. +// Output returns union of sorted proposals received // in the given round with minimal specified grade. func (g *gossip) thresholdGossip(filter IterRound, grade grade) []types.ProposalID { rst := thresholdGossip(thresholdTallies(g.state, filter, grade, tallyProposals), g.threshold) diff --git a/malfeasance/handler_test.go b/malfeasance/handler_test.go index bdc5768537..f594138f93 100644 --- a/malfeasance/handler_test.go +++ b/malfeasance/handler_test.go @@ -29,14 +29,13 @@ import ( type testMalfeasanceHandler struct { *Handler - observedLogs *observer.ObservedLogs - db sql.StateDatabase - mockTrt *Mocktortoise + db sql.StateDatabase + mockTrt *Mocktortoise } func newHandler(tb testing.TB) *testMalfeasanceHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, _ := observer.New(zapcore.WarnLevel) logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) @@ -57,9 +56,8 @@ func newHandler(tb testing.TB) *testMalfeasanceHandler { return &testMalfeasanceHandler{ Handler: h, - observedLogs: observedLogs, - db: db, - mockTrt: trt, + db: db, + mockTrt: trt, } } diff --git a/mesh/interface.go b/mesh/interface.go index 2a6efaf4f9..0d1fa30692 100644 --- a/mesh/interface.go +++ b/mesh/interface.go @@ -24,7 +24,3 @@ type vmState interface { []types.CoinbaseReward, ) ([]types.Transaction, []types.TransactionWithResult, error) } - -type layerClock interface { - CurrentLayer() types.LayerID -} diff --git a/mesh/malfeasance_test.go b/mesh/malfeasance_test.go index 6d473c517a..4ff71dfdfd 100644 --- a/mesh/malfeasance_test.go +++ b/mesh/malfeasance_test.go @@ -22,13 +22,12 @@ import ( type testMalfeasanceHandler struct { *MalfeasanceHandler - observedLogs *observer.ObservedLogs - db sql.StateDatabase + db sql.StateDatabase } func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { db := statesql.InMemory() - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, _ := observer.New(zapcore.WarnLevel) logger := zaptest.NewLogger(tb, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) @@ -40,8 +39,7 @@ func newTestMalfeasanceHandler(tb testing.TB) *testMalfeasanceHandler { return &testMalfeasanceHandler{ MalfeasanceHandler: h, - observedLogs: observedLogs, - db: db, + db: db, } } diff --git a/mesh/mesh.go b/mesh/mesh.go index d0e3c76842..7c80cf8174 100644 --- a/mesh/mesh.go +++ b/mesh/mesh.go @@ -40,7 +40,6 @@ type Mesh struct { logger *zap.Logger cdb sql.StateDatabase atxsdata *atxsdata.Data - clock layerClock executor *Executor conState conservativeState @@ -65,7 +64,6 @@ type Mesh struct { func NewMesh( db sql.StateDatabase, atxsdata *atxsdata.Data, - c layerClock, trtl system.Tortoise, exec *Executor, state conservativeState, @@ -75,7 +73,6 @@ func NewMesh( logger: logger, cdb: db, atxsdata: atxsdata, - clock: c, trtl: trtl, executor: exec, conState: state, @@ -306,7 +303,7 @@ func (msh *Mesh) ProcessLayer(ctx context.Context, lid types.LayerID) error { msh.mu.Lock() defer msh.mu.Unlock() - msh.trtl.TallyVotes(ctx, lid) + msh.trtl.TallyVotes(lid) if err := msh.setProcessedLayer(lid); err != nil { return err diff --git a/mesh/mesh_test.go b/mesh/mesh_test.go index 7832fd1b45..2cb9d02fae 100644 --- a/mesh/mesh_test.go +++ b/mesh/mesh_test.go @@ -41,7 +41,6 @@ type testMesh struct { // it is used in malfeasence.Validate, which is called in the tests cdb *datastore.CachedDB atxsdata *atxsdata.Data - mockClock *mocks.MocklayerClock mockVM *mocks.MockvmState mockState *mocks.MockconservativeState mockTortoise *smocks.MockTortoise @@ -58,13 +57,12 @@ func createTestMesh(t *testing.T) *testMesh { db: db, cdb: datastore.NewCachedDB(db, lg), atxsdata: atxsdata, - mockClock: mocks.NewMocklayerClock(ctrl), mockVM: mocks.NewMockvmState(ctrl), mockState: mocks.NewMockconservativeState(ctrl), mockTortoise: smocks.NewMockTortoise(ctrl), } exec := NewExecutor(db, atxsdata, tm.mockVM, tm.mockState, lg) - msh, err := NewMesh(db, atxsdata, tm.mockClock, tm.mockTortoise, exec, tm.mockState, lg) + msh, err := NewMesh(db, atxsdata, tm.mockTortoise, exec, tm.mockState, lg) require.NoError(t, err) ctx, cancel := context.WithCancel(context.Background()) done := make(chan struct{}) @@ -210,7 +208,6 @@ func TestMesh_WakeUpWhileGenesis(t *testing.T) { msh, err := NewMesh( tm.db, tm.atxsdata, - tm.mockClock, tm.mockTortoise, tm.executor, tm.mockState, @@ -248,7 +245,6 @@ func TestMesh_WakeUp(t *testing.T) { msh, err := NewMesh( tm.db, tm.atxsdata, - tm.mockClock, tm.mockTortoise, tm.executor, tm.mockState, @@ -734,7 +730,7 @@ func TestProcessLayer(t *testing.T) { t.Parallel() tm := createTestMesh(t) - tm.mockTortoise.EXPECT().TallyVotes(gomock.Any(), gomock.Any()).AnyTimes() + tm.mockTortoise.EXPECT().TallyVotes(gomock.Any()).AnyTimes() tm.mockVM.EXPECT().GetStateRoot().AnyTimes() tm.mockVM.EXPECT().Revert(gomock.Any()).AnyTimes() tm.mockState.EXPECT().RevertCache(gomock.Any()).AnyTimes() @@ -945,7 +941,7 @@ func TestProcessLayerPerHareOutput(t *testing.T) { t.Run(tc.desc, func(t *testing.T) { t.Parallel() tm := createTestMesh(t) - tm.mockTortoise.EXPECT().TallyVotes(gomock.Any(), gomock.Any()).AnyTimes() + tm.mockTortoise.EXPECT().TallyVotes(gomock.Any()).AnyTimes() tm.mockTortoise.EXPECT(). Updates(). Return(nil). diff --git a/mesh/mocks/mocks.go b/mesh/mocks/mocks.go index 8b232699a3..a57e586e43 100644 --- a/mesh/mocks/mocks.go +++ b/mesh/mocks/mocks.go @@ -331,64 +331,3 @@ func (c *MockvmStateRevertCall) DoAndReturn(f func(types.LayerID) error) *Mockvm c.Call = c.Call.DoAndReturn(f) return c } - -// MocklayerClock is a mock of layerClock interface. -type MocklayerClock struct { - ctrl *gomock.Controller - recorder *MocklayerClockMockRecorder -} - -// MocklayerClockMockRecorder is the mock recorder for MocklayerClock. -type MocklayerClockMockRecorder struct { - mock *MocklayerClock -} - -// NewMocklayerClock creates a new mock instance. -func NewMocklayerClock(ctrl *gomock.Controller) *MocklayerClock { - mock := &MocklayerClock{ctrl: ctrl} - mock.recorder = &MocklayerClockMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MocklayerClock) EXPECT() *MocklayerClockMockRecorder { - return m.recorder -} - -// CurrentLayer mocks base method. -func (m *MocklayerClock) CurrentLayer() types.LayerID { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CurrentLayer") - ret0, _ := ret[0].(types.LayerID) - return ret0 -} - -// CurrentLayer indicates an expected call of CurrentLayer. -func (mr *MocklayerClockMockRecorder) CurrentLayer() *MocklayerClockCurrentLayerCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentLayer", reflect.TypeOf((*MocklayerClock)(nil).CurrentLayer)) - return &MocklayerClockCurrentLayerCall{Call: call} -} - -// MocklayerClockCurrentLayerCall wrap *gomock.Call -type MocklayerClockCurrentLayerCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MocklayerClockCurrentLayerCall) Return(arg0 types.LayerID) *MocklayerClockCurrentLayerCall { - c.Call = c.Call.Return(arg0) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MocklayerClockCurrentLayerCall) Do(f func() types.LayerID) *MocklayerClockCurrentLayerCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MocklayerClockCurrentLayerCall) DoAndReturn(f func() types.LayerID) *MocklayerClockCurrentLayerCall { - c.Call = c.Call.DoAndReturn(f) - return c -} diff --git a/miner/active_set_generator.go b/miner/active_set_generator.go index 2a48ec80da..8dafec3d15 100644 --- a/miner/active_set_generator.go +++ b/miner/active_set_generator.go @@ -270,9 +270,9 @@ func getSetWeight(atxsdata *atxsdata.Data, target types.EpochID, set []types.ATX // https://community.spacemesh.io/t/grading-atxs-for-the-active-set/335 // // let s be the start of the epoch, and δ the network propagation time. -// grade 0: ATX was received at time t >= s-3δ, or an equivocation proof was received by time s-δ. -// grade 1: ATX was received at time t < s-3δ before the start of the epoch, and no equivocation proof by time s-δ. -// grade 2: ATX was received at time t < s-4δ, and no equivocation proof was received for that id until time s. +// Grade 0: ATX was received at time t >= s-3δ, or an equivocation proof was received by time s-δ. +// Grade 1: ATX was received at time t < s-3δ before the start of the epoch, and no equivocation proof by time s-δ. +// Grade 2: ATX was received at time t < s-4δ, and no equivocation proof was received for that id until time s. type atxGrade int const ( diff --git a/miner/active_set_generator_test.go b/miner/active_set_generator_test.go index c1e381c2ce..fe489c7ffc 100644 --- a/miner/active_set_generator_test.go +++ b/miner/active_set_generator_test.go @@ -83,25 +83,21 @@ func newTesterActiveSetGenerator(tb testing.TB, cfg config) *testerActiveSetGene ) ) return &testerActiveSetGenerator{ - tb: tb, gen: gen, db: db, localdb: localdb, atxsdata: atxsdata, - ctrl: ctrl, clock: clock, wallclock: wallclock, } } type testerActiveSetGenerator struct { - tb testing.TB gen *activeSetGenerator db sql.StateDatabase localdb sql.LocalDatabase atxsdata *atxsdata.Data - ctrl *gomock.Controller clock *mocks.MocklayerClock wallclock clockwork.FakeClock } diff --git a/miner/mocks/mocks.go b/miner/mocks/mocks.go index c873f06297..777701d284 100644 --- a/miner/mocks/mocks.go +++ b/miner/mocks/mocks.go @@ -186,15 +186,15 @@ func (c *MockvotesEncoderLatestCompleteCall) DoAndReturn(f func() types.LayerID) } // TallyVotes mocks base method. -func (m *MockvotesEncoder) TallyVotes(arg0 context.Context, arg1 types.LayerID) { +func (m *MockvotesEncoder) TallyVotes(arg0 types.LayerID) { m.ctrl.T.Helper() - m.ctrl.Call(m, "TallyVotes", arg0, arg1) + m.ctrl.Call(m, "TallyVotes", arg0) } // TallyVotes indicates an expected call of TallyVotes. -func (mr *MockvotesEncoderMockRecorder) TallyVotes(arg0, arg1 any) *MockvotesEncoderTallyVotesCall { +func (mr *MockvotesEncoderMockRecorder) TallyVotes(arg0 any) *MockvotesEncoderTallyVotesCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TallyVotes", reflect.TypeOf((*MockvotesEncoder)(nil).TallyVotes), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TallyVotes", reflect.TypeOf((*MockvotesEncoder)(nil).TallyVotes), arg0) return &MockvotesEncoderTallyVotesCall{Call: call} } @@ -210,13 +210,13 @@ func (c *MockvotesEncoderTallyVotesCall) Return() *MockvotesEncoderTallyVotesCal } // Do rewrite *gomock.Call.Do -func (c *MockvotesEncoderTallyVotesCall) Do(f func(context.Context, types.LayerID)) *MockvotesEncoderTallyVotesCall { +func (c *MockvotesEncoderTallyVotesCall) Do(f func(types.LayerID)) *MockvotesEncoderTallyVotesCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockvotesEncoderTallyVotesCall) DoAndReturn(f func(context.Context, types.LayerID)) *MockvotesEncoderTallyVotesCall { +func (c *MockvotesEncoderTallyVotesCall) DoAndReturn(f func(types.LayerID)) *MockvotesEncoderTallyVotesCall { c.Call = c.Call.DoAndReturn(f) return c } diff --git a/miner/proposal_builder.go b/miner/proposal_builder.go index a9a3403502..8caf7355e4 100644 --- a/miner/proposal_builder.go +++ b/miner/proposal_builder.go @@ -46,7 +46,7 @@ type conservativeState interface { type votesEncoder interface { LatestComplete() types.LayerID - TallyVotes(context.Context, types.LayerID) + TallyVotes(types.LayerID) EncodeVotes(context.Context, ...tortoise.EncodeVotesOpts) (*types.Opinion, error) } @@ -400,10 +400,10 @@ func (pb *ProposalBuilder) runPrepare(ctx context.Context, current types.LayerID pb.activeGen.ensure(ctx, nextEpoch) } -// only output the mesh hash in the proposal when the following conditions are met: +// Only output the mesh hash in the proposal when the following conditions are met: // - tortoise has verified every layer i < N-hdist. // - the node has hare output for every layer i such that N-hdist <= i <= N. -// this is done such that when the node is generating the block based on hare output, +// This is done such that when the node is generating the block based on hare output, // it can do optimistic filtering if the majority of the proposals agreed on the mesh hash. func (pb *ProposalBuilder) decideMeshHash(ctx context.Context, current types.LayerID) types.Hash32 { var minVerified types.LayerID @@ -582,7 +582,7 @@ func (pb *ProposalBuilder) build(ctx context.Context, lid types.LayerID) error { pb.signers.mu.Unlock() encodeVotesOnce := sync.OnceValues(func() (*types.Opinion, error) { - pb.tortoise.TallyVotes(ctx, lid) + pb.tortoise.TallyVotes(lid) // TODO(dshulyak) get rid from the EncodeVotesWithCurrent option in a followup // there are some dependencies in the tests opinion, err := pb.tortoise.EncodeVotes(ctx, tortoise.EncodeVotesWithCurrent(lid)) diff --git a/miner/proposal_builder_test.go b/miner/proposal_builder_test.go index 59280e51c0..02657cab5a 100644 --- a/miner/proposal_builder_test.go +++ b/miner/proposal_builder_test.go @@ -308,7 +308,7 @@ func TestBuild_BlockedSignerInitDoesntBlockEligible(t *testing.T) { clock.EXPECT().LayerToTime(gomock.Any()).Return(time.Unix(0, 0)).AnyTimes() conState.EXPECT().SelectProposalTXs(lid, gomock.Any()).Return(txs) - trtl.EXPECT().TallyVotes(gomock.Any(), lid) + trtl.EXPECT().TallyVotes(lid) trtl.EXPECT().EncodeVotes(gomock.Any(), gomock.Any()).Return(&opinion, nil) trtl.EXPECT().LatestComplete().Return(lid - 1) ctx, cancel := context.WithCancel(context.Background()) @@ -341,7 +341,7 @@ func TestBuild_BlockedSignerInitDoesntBlockEligible(t *testing.T) { expectCounters(signers[0], 3, beacon, 777, 2, 5), expectRef(expectedProposal.Ballot.ID()), ) - trtl.EXPECT().TallyVotes(gomock.Any(), lid) + trtl.EXPECT().TallyVotes(lid) trtl.EXPECT().EncodeVotes(gomock.Any(), gomock.Any()).Return(&opinion, nil) trtl.EXPECT().LatestComplete().Return(lid - 1) conState.EXPECT().SelectProposalTXs(lid, gomock.Any()).Return(txs) @@ -971,7 +971,7 @@ func TestBuild(t *testing.T) { } { if step.opinion != nil { - tortoise.EXPECT().TallyVotes(ctx, step.lid) + tortoise.EXPECT().TallyVotes(step.lid) tortoise.EXPECT(). EncodeVotes(ctx, gomock.Any()). Return(step.opinion, step.encodeVotesErr) diff --git a/node/node.go b/node/node.go index 40de6dbe29..0690bcf9e6 100644 --- a/node/node.go +++ b/node/node.go @@ -386,7 +386,6 @@ type App struct { pprofService *http.Server profilerService *pyroscope.Profiler syncer *syncer.Syncer - proposalListener *proposals.Handler proposalBuilder *miner.ProposalBuilder mesh *mesh.Mesh atxsdata *atxsdata.Data @@ -398,7 +397,6 @@ type App struct { blockGen *blocks.Generator certifier *blocks.Certifier atxBuilder *activation.Builder - nipostBuilder *activation.NIPostBuilder atxHandler *activation.Handler txHandler *txs.TxHandler validator *activation.Validator @@ -406,11 +404,9 @@ type App struct { beaconProtocol *beacon.ProtocolDriver log log.Log syncLogger log.Log - svm *vm.VM conState *txs.ConservativeState fetcher *fetch.Fetch ptimesync *peersync.Sync - tortoise *tortoise.Tortoise updater *bootstrap.Updater poetDb *activation.PoetDb postVerifier activation.PostVerifier @@ -712,7 +708,7 @@ func (app *App) initServices(ctx context.Context) error { app.addLogger(ExecutorLogger, lg).Zap(), ) mlog := app.addLogger(MeshLogger, lg).Zap() - msh, err := mesh.NewMesh(app.db, app.atxsdata, app.clock, trtl, executor, app.conState, mlog) + msh, err := mesh.NewMesh(app.db, app.atxsdata, trtl, executor, app.conState, mlog) if err != nil { return fmt.Errorf("create mesh: %w", err) } @@ -1134,15 +1130,10 @@ func (app *App) initServices(ctx context.Context) error { ) invalidPostMH := activation.NewInvalidPostIndexHandler( app.cachedDB, - malfeasanceLogger, app.edVerifier, app.postVerifier, ) - invalidPrevMH := activation.NewInvalidPrevATXHandler( - app.cachedDB, - malfeasanceLogger, - app.edVerifier, - ) + invalidPrevMH := activation.NewInvalidPrevATXHandler(app.cachedDB, app.edVerifier) nodeIDs := make([]types.NodeID, 0, len(app.signers)) for _, s := range app.signers { @@ -1269,17 +1260,13 @@ func (app *App) initServices(ctx context.Context) error { ) app.proposalBuilder = proposalBuilder - app.proposalListener = proposalListener app.mesh = msh app.syncer = newSyncer - app.svm = state app.atxBuilder = atxBuilder - app.nipostBuilder = nipostBuilder app.atxHandler = atxHandler app.poetDb = poetDb app.fetcher = fetcher app.beaconProtocol = beaconProtocol - app.tortoise = trtl if !app.Config.TIME.Peersync.Disable { app.ptimesync = peersync.New( app.host, @@ -1529,7 +1516,7 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv app.grpcServices[svc] = service return service, nil case grpcserver.PostInfo: - service := grpcserver.NewPostInfoService(app.addLogger(PostInfoServiceLogger, lg).Zap(), app.atxBuilder) + service := grpcserver.NewPostInfoService(app.atxBuilder) app.grpcServices[svc] = service return service, nil case grpcserver.Transaction: @@ -1595,7 +1582,7 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv app.grpcServices[svc] = service return service, nil case v2alpha1.TransactionStream: - service := v2alpha1.NewTransactionStreamService(app.db) + service := v2alpha1.NewTransactionStreamService() app.grpcServices[svc] = service return service, nil case v2alpha1.Account: diff --git a/node/node_test.go b/node/node_test.go index 6b6f7773ea..d8482ef133 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -524,7 +524,7 @@ func TestSpacemeshApp_TransactionService(t *testing.T) { // If there's an error in the args, it will return immediately. var wg sync.WaitGroup wg.Add(1) - //nolint:testifylint + // nolint:testifylint go func() { str, err := testArgs(ctx, cmdWithRun(run)) require.Empty(t, str) @@ -565,7 +565,7 @@ func TestSpacemeshApp_TransactionService(t *testing.T) { // TODO(dshulyak) synchronization below is messed up var wg2 sync.WaitGroup wg2.Add(1) - //nolint:testifylint + // nolint:testifylint go func() { defer wg2.Done() diff --git a/p2p/addresslist.go b/p2p/addresslist.go index c7cb361a0a..1f259f1d12 100644 --- a/p2p/addresslist.go +++ b/p2p/addresslist.go @@ -6,18 +6,18 @@ import ( "fmt" "strings" - "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" ) // AddressList represents a list of addresses. -type AddressList []multiaddr.Multiaddr +type AddressList []ma.Multiaddr // AddressListFromStringSlice parses strings in the slice into // Multiaddr values and returns them as an AddressList. func AddressListFromStringSlice(s []string) (AddressList, error) { al := make(AddressList, len(s)) for n, s := range s { - ma, err := multiaddr.NewMultiaddr(s) + ma, err := ma.NewMultiaddr(s) if err != nil { return nil, fmt.Errorf("address %s is not a valid multiaddr: %w", s, err) } diff --git a/p2p/dhtdiscovery/discovery.go b/p2p/dhtdiscovery/discovery.go index 37fe506db4..24d6403207 100644 --- a/p2p/dhtdiscovery/discovery.go +++ b/p2p/dhtdiscovery/discovery.go @@ -57,12 +57,6 @@ func WithMinPeers(minPeers int) Opt { } } -func WithHighPeers(peers int) Opt { - return func(d *Discovery) { - d.highPeers = peers - } -} - func WithBootnodes(bootnodes []peer.AddrInfo) Opt { return func(d *Discovery) { d.bootnodes = bootnodes @@ -189,7 +183,6 @@ func New(h DiscoveryHost, opts ...Opt) (*Discovery, error) { timeout: 30 * time.Second, bootstrapDuration: 30 * time.Second, minPeers: 20, - highPeers: 40, advertiseInterval: time.Minute, advertiseRetryDelay: time.Minute, findPeersRetryDelay: time.Minute, @@ -240,7 +233,7 @@ type Discovery struct { // timeout used for connections timeout time.Duration bootstrapDuration time.Duration - minPeers, highPeers int + minPeers int backup, bootnodes []peer.AddrInfo advertiseDelay time.Duration advertiseInterval time.Duration diff --git a/p2p/gater.go b/p2p/gater.go index d9d20fc82b..d3805697ca 100644 --- a/p2p/gater.go +++ b/p2p/gater.go @@ -9,7 +9,7 @@ import ( "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" "github.com/libp2p/go-libp2p/core/peer" - "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" ) var _ connmgr.ConnectionGater = (*gater)(nil) @@ -61,7 +61,7 @@ func (g *gater) InterceptPeerDial(pid peer.ID) bool { return len(g.h.Network().Peers()) <= g.outbound } -func (g *gater) InterceptAddrDial(pid peer.ID, m multiaddr.Multiaddr) bool { +func (g *gater) InterceptAddrDial(pid peer.ID, m ma.Multiaddr) bool { if _, exist := g.direct[pid]; exist { return true } @@ -80,14 +80,14 @@ func (*gater) InterceptUpgraded(_ network.Conn) (allow bool, reason control.Disc return true, 0 } -func (g *gater) allowed(m multiaddr.Multiaddr) bool { +func (g *gater) allowed(m ma.Multiaddr) bool { allow := true - multiaddr.ForEach(m, func(c multiaddr.Component) bool { + ma.ForEach(m, func(c ma.Component) bool { switch c.Protocol().Code { - case multiaddr.P_IP4: + case ma.P_IP4: allow = !inAddrRange(net.IP(c.RawValue()), g.ip4blocklist) return false - case multiaddr.P_IP6: + case ma.P_IP6: allow = !inAddrRange(net.IP(c.RawValue()), g.ip6blocklist) return false } diff --git a/p2p/gater_test.go b/p2p/gater_test.go index b3c8865cf8..0dd9004ecf 100644 --- a/p2p/gater_test.go +++ b/p2p/gater_test.go @@ -4,7 +4,7 @@ import ( "testing" mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" - "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" "github.com/stretchr/testify/require" ) @@ -26,7 +26,7 @@ func TestGater(t *testing.T) { {address: "/ip4/95.217.200.84/tcp/8000", allowed: true}, } { t.Run(tc.address, func(t *testing.T) { - addr, err := multiaddr.NewMultiaddr(tc.address) + addr, err := ma.NewMultiaddr(tc.address) require.NoError(t, err) require.Equal(t, tc.allowed, gater.InterceptAddrDial("", addr)) }) diff --git a/p2p/handshake/handshake.go b/p2p/handshake/handshake.go index 15efe760bd..192e6de769 100644 --- a/p2p/handshake/handshake.go +++ b/p2p/handshake/handshake.go @@ -68,13 +68,6 @@ func WithTimeout(t time.Duration) Option { } } -// WithLog specifies handshake retry interval. -func WithRetryInterval(i time.Duration) Option { - return func(w *transportWrapper) { - w.retryInterval = i - } -} - // WithAttempts specifies handshake retry count. func WithAttempts(n int) Option { return func(w *transportWrapper) { @@ -84,11 +77,10 @@ func WithAttempts(n int) Option { type transportWrapper struct { transport.Transport - nc NetworkCookie - logger *zap.Logger - timeout time.Duration - retryInterval time.Duration - attempts int + nc NetworkCookie + logger *zap.Logger + timeout time.Duration + attempts int } var ( @@ -104,12 +96,11 @@ func MaybeWrapTransport(t transport.Transport, nc NetworkCookie, opts ...Option) return t } tr := &transportWrapper{ - Transport: t, - nc: nc, - logger: zap.NewNop(), - timeout: handshakeTimeout, - retryInterval: handshakeRetryInterval, - attempts: handshakeAttempts, + Transport: t, + nc: nc, + logger: zap.NewNop(), + timeout: handshakeTimeout, + attempts: handshakeAttempts, } for _, opt := range opts { opt(tr) diff --git a/p2p/host.go b/p2p/host.go index 89400c0417..f3bfa6e17d 100644 --- a/p2p/host.go +++ b/p2p/host.go @@ -28,7 +28,7 @@ import ( quic "github.com/libp2p/go-libp2p/p2p/transport/quic" "github.com/libp2p/go-libp2p/p2p/transport/quicreuse" "github.com/libp2p/go-libp2p/p2p/transport/tcp" - "github.com/multiformats/go-multiaddr" + ma "github.com/multiformats/go-multiaddr" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -347,7 +347,7 @@ func New( if len(cfg.AdvertiseAddress) > 0 { lopts = append( lopts, - libp2p.AddrsFactory(func([]multiaddr.Multiaddr) []multiaddr.Multiaddr { + libp2p.AddrsFactory(func([]ma.Multiaddr) []ma.Multiaddr { return cfg.AdvertiseAddress }), ) diff --git a/p2p/metrics/connections.go b/p2p/metrics/connections.go index 3a6ae8cb23..a44bcb1566 100644 --- a/p2p/metrics/connections.go +++ b/p2p/metrics/connections.go @@ -37,9 +37,9 @@ var ( ) // ConnectionsMeeter stores the number of connections for node. -// number of connections -// number of streams per each protocol -// histogram for server request durations for each protocol. +// - Number of connections +// - Number of streams per each protocol +// - Histogram for server request durations for each protocol. type ConnectionsMeeter struct{} // NewConnectionsMeeter returns a new ConnectionsMeeter. diff --git a/p2p/pubsub/pubsub.go b/p2p/pubsub/pubsub.go index b64dd2f859..9d181b2313 100644 --- a/p2p/pubsub/pubsub.go +++ b/p2p/pubsub/pubsub.go @@ -33,7 +33,7 @@ func init() { } const ( - // score thresholds. + // Score thresholds, // see details https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#score-thresholds // GossipScoreThreshold when a peer's score drops below this threshold, no gossip is emitted towards that peer diff --git a/p2p/pubsub/wrapper.go b/p2p/pubsub/wrapper.go index 95f8475174..480dad6058 100644 --- a/p2p/pubsub/wrapper.go +++ b/p2p/pubsub/wrapper.go @@ -13,7 +13,7 @@ import ( "go.uber.org/zap" "github.com/spacemeshos/go-spacemesh/log" - "github.com/spacemeshos/go-spacemesh/p2p/metrics" + p2pmetrics "github.com/spacemeshos/go-spacemesh/p2p/metrics" ) type PubSub interface { @@ -70,7 +70,7 @@ func (ps *GossipPubSub) Register(topic string, handler GossipHandler, opts ...Va func(ctx context.Context, pid peer.ID, msg *pubsub.Message) pubsub.ValidationResult { start := time.Now() err := handler(log.WithNewRequestID(ctx), pid, msg.Data) - metrics.ProcessedMessagesDuration.WithLabelValues(topic, castResult(err)). + p2pmetrics.ProcessedMessagesDuration.WithLabelValues(topic, castResult(err)). Observe(float64(time.Since(start))) if err != nil { ps.logger.Debug("topic validation failed", zap.String("topic", topic), zap.Error(err)) diff --git a/p2p/upgrade.go b/p2p/upgrade.go index 0258ad577a..5bd8944c36 100644 --- a/p2p/upgrade.go +++ b/p2p/upgrade.go @@ -43,13 +43,6 @@ func WithConfig(cfg Config) Opt { } } -// WithContext set context for Host. -func WithContext(ctx context.Context) Opt { - return func(fh *Host) { - fh.ctx = ctx - } -} - // WithNodeReporter updates reporter that is notified every time when // node added or removed a peer. func WithNodeReporter(reporter func() error) Opt { @@ -167,7 +160,6 @@ func Upgrade(h host.Host, opts ...Opt) (*Host, error) { } dopts := []discovery.Opt{ discovery.WithMinPeers(cfg.MinPeers), - discovery.WithHighPeers(cfg.HighPeers), discovery.WithDir(cfg.DataDir), discovery.WithBootnodes(bootnodes), discovery.WithLogger(fh.logger), diff --git a/proposals/eligibility_validator.go b/proposals/eligibility_validator.go index 3f9c62d1d7..e748d0edd5 100644 --- a/proposals/eligibility_validator.go +++ b/proposals/eligibility_validator.go @@ -16,7 +16,7 @@ import ( ) // Validator validates the eligibility of a Ballot. -// the validation focuses on eligibility only and assumes the Ballot to be valid otherwise. +// The validation focuses on eligibility only and assumes the Ballot to be valid otherwise. type Validator struct { minActiveSetWeight []types.EpochMinimalActiveWeight avgLayerSize uint32 diff --git a/proposals/handler.go b/proposals/handler.go index c5729dc357..b62971bfe9 100644 --- a/proposals/handler.go +++ b/proposals/handler.go @@ -602,7 +602,7 @@ func (h *Handler) getActiveSetWeight(ctx context.Context, id types.Hash32) (uint } func (h *Handler) checkBallotDataIntegrity(ctx context.Context, b *types.Ballot) (uint64, error) { - //nolint:nestif + // nolint:nestif if b.RefBallot == types.EmptyBallotID { // this is the smesher's first Ballot in this epoch, should contain EpochData if b.EpochData == nil { diff --git a/proposals/metrics.go b/proposals/metrics.go index f4cbb8d3b4..c330a25271 100644 --- a/proposals/metrics.go +++ b/proposals/metrics.go @@ -51,7 +51,7 @@ var numBlocksInException = metrics.NewHistogramWithBuckets( ) const ( - // labels for each step of proposal/ballot processing. + // Labels for each step of proposal/ballot processing. decodeInit = "decode" peerHashes = "hashes" ballot = "ballot" diff --git a/sql/certificates/certs.go b/sql/certificates/certs.go index 78824a6e30..7ceae7b012 100644 --- a/sql/certificates/certs.go +++ b/sql/certificates/certs.go @@ -30,7 +30,7 @@ func setHareOutput(db sql.Executor, lid types.LayerID, bid types.BlockID, valid } // GetHareOutput returns the block that's valid as hare output for the specified layer. -// if there are more than one valid blocks, return types.EmptyBlockID. +// If there are more than one valid blocks, return types.EmptyBlockID. func GetHareOutput(db sql.Executor, lid types.LayerID) (types.BlockID, error) { var ( result types.BlockID diff --git a/sql/metrics/prometheus.go b/sql/metrics/prometheus.go index fb35490ee0..23c6429b90 100644 --- a/sql/metrics/prometheus.go +++ b/sql/metrics/prometheus.go @@ -142,7 +142,7 @@ func (d *DBMetricsCollector) checkCompiledWithDBStat() (bool, error) { return false, nil } -// getListOfTables returns list of tables in db. need to separate size indexes and tables. +// getListOfTables returns list of tables in db. Need to separate size indexes and tables. func (d *DBMetricsCollector) getListOfTables() (map[string]struct{}, error) { tables := make(map[string]struct{}) _, err := d.db.Exec("SELECT name FROM sqlite_master WHERE type='table'", nil, func(stmt *sql.Statement) bool { diff --git a/syncer/atxsync/atxsync.go b/syncer/atxsync/atxsync.go index 1cee0fa194..387bfce9f6 100644 --- a/syncer/atxsync/atxsync.go +++ b/syncer/atxsync/atxsync.go @@ -31,7 +31,7 @@ func getMissing(db sql.StateDatabase, set []types.ATXID) ([]types.ATXID, error) // Download specified set of atxs from peers in the network. // -// actual retry interval will be between [retryInterval, 2*retryInterval]. +// Actual retry interval will be between [retryInterval, 2*retryInterval]. func Download( ctx context.Context, retryInterval time.Duration, diff --git a/syncer/atxsync/syncer_test.go b/syncer/atxsync/syncer_test.go index 657170428c..5c776ab723 100644 --- a/syncer/atxsync/syncer_test.go +++ b/syncer/atxsync/syncer_test.go @@ -48,23 +48,19 @@ func newTester(tb testing.TB, cfg Config) *tester { fetcher := mocks.NewMockfetcher(ctrl) syncer := New(fetcher, db, localdb, WithConfig(cfg), WithLogger(zaptest.NewLogger(tb))) return &tester{ - tb: tb, syncer: syncer, localdb: localdb, db: db, cfg: cfg, - ctrl: ctrl, fetcher: fetcher, } } type tester struct { - tb testing.TB syncer *Syncer localdb sql.LocalDatabase db sql.StateDatabase cfg Config - ctrl *gomock.Controller fetcher *mocks.Mockfetcher } diff --git a/syncer/data_fetch.go b/syncer/data_fetch.go index bc85a88ce9..b05f01a6fb 100644 --- a/syncer/data_fetch.go +++ b/syncer/data_fetch.go @@ -14,7 +14,6 @@ import ( "github.com/spacemeshos/go-spacemesh/fetch" "github.com/spacemeshos/go-spacemesh/log" "github.com/spacemeshos/go-spacemesh/p2p" - "github.com/spacemeshos/go-spacemesh/system" ) var errNoPeers = errors.New("no peers") @@ -23,23 +22,17 @@ var errNoPeers = errors.New("no peers") type DataFetch struct { fetcher - logger *zap.Logger - msh meshProvider - tortoise system.Tortoise + logger *zap.Logger } // NewDataFetch creates a new DataFetch instance. func NewDataFetch( - msh meshProvider, fetch fetcher, - tortoise system.Tortoise, lg *zap.Logger, ) *DataFetch { return &DataFetch{ - fetcher: fetch, - logger: lg, - msh: msh, - tortoise: tortoise, + fetcher: fetch, + logger: lg, } } diff --git a/syncer/data_fetch_test.go b/syncer/data_fetch_test.go index ad6cfc3189..d1276e5838 100644 --- a/syncer/data_fetch_test.go +++ b/syncer/data_fetch_test.go @@ -16,24 +16,19 @@ import ( "github.com/spacemeshos/go-spacemesh/p2p" "github.com/spacemeshos/go-spacemesh/syncer" "github.com/spacemeshos/go-spacemesh/syncer/mocks" - smocks "github.com/spacemeshos/go-spacemesh/system/mocks" ) type testDataFetch struct { *syncer.DataFetch - mMesh *mocks.MockmeshProvider - mFetcher *mocks.Mockfetcher - mTortoise *smocks.MockTortoise + mFetcher *mocks.Mockfetcher } func newTestDataFetch(t *testing.T) *testDataFetch { ctrl := gomock.NewController(t) tl := &testDataFetch{ - mMesh: mocks.NewMockmeshProvider(ctrl), - mFetcher: mocks.NewMockfetcher(ctrl), - mTortoise: smocks.NewMockTortoise(ctrl), + mFetcher: mocks.NewMockfetcher(ctrl), } - tl.DataFetch = syncer.NewDataFetch(tl.mMesh, tl.mFetcher, tl.mTortoise, zaptest.NewLogger(t)) + tl.DataFetch = syncer.NewDataFetch(tl.mFetcher, zaptest.NewLogger(t)) return tl } diff --git a/syncer/find_fork.go b/syncer/find_fork.go index 459c190ff3..a8c57b2d18 100644 --- a/syncer/find_fork.go +++ b/syncer/find_fork.go @@ -30,9 +30,9 @@ type layerHash struct { } // boundary is used to define the to and from layers in the hash mesh requests to peers. -// the hashes of the boundary layers are known to the node and are used to double-check that +// The hashes of the boundary layers are known to the node and are used to double-check that // the peer has not changed its opinions on those layers. -// if the boundary hashes change during a fork-finding session, the session is aborted. +// If the boundary hashes change during a fork-finding session, the session is aborted. type boundary struct { from, to *layerHash } @@ -245,8 +245,8 @@ func (ff *ForkFinder) updateAgreement(peer p2p.Peer, update *layerHash, created } // setupBoundary sets up the boundary for the hash requests. -// boundary.from contains the latest layer node and peer agree on hash. -// boundary.to contains the oldest layer node and peer disagree on hash. +// - boundary.from contains the latest layer node and peer agree on hash. +// - boundary.to contains the oldest layer node and peer disagree on hash. func (ff *ForkFinder) setupBoundary(peer p2p.Peer, oldestDiff *layerHash) (*boundary, error) { ff.mu.Lock() defer ff.mu.Unlock() @@ -281,9 +281,9 @@ func (ff *ForkFinder) setupBoundary(peer p2p.Peer, oldestDiff *layerHash) (*boun return &bnd, nil } -// get layer hashes from peers in the range defined by the boundary. -// if the number of hashes is less than maxHashesInReq, then request every hash. -// otherwise, set appropriate params such that the number of hashes requested is maxHashesInReq +// Get layer hashes from peers in the range defined by the boundary. +// If the number of hashes is less than maxHashesInReq, then request every hash. +// Otherwise, set appropriate params such that the number of hashes requested is maxHashesInReq // while ensuring hashes for the boundary layers are requested. func (ff *ForkFinder) sendRequest( ctx context.Context, diff --git a/syncer/interface.go b/syncer/interface.go index 72ee99be49..6c9d2244d9 100644 --- a/syncer/interface.go +++ b/syncer/interface.go @@ -17,12 +17,8 @@ type layerTicker interface { LayerToTime(types.LayerID) time.Time } -type meshProvider interface { - SetZeroBlockLayer(context.Context, types.LayerID) -} - // fetchLogic is the interface between syncer and low-level fetching. -// it handles all data fetching related logic (for layer or for epoch, from all peers or from any random peer ...etc). +// It handles all data fetching related logic (for layer or for epoch, from all peers or from any random peer ...etc). type fetchLogic interface { fetcher diff --git a/syncer/malsync/syncer_test.go b/syncer/malsync/syncer_test.go index 035b55b025..469e176e95 100644 --- a/syncer/malsync/syncer_test.go +++ b/syncer/malsync/syncer_test.go @@ -138,10 +138,8 @@ func malData(ids ...string) []types.NodeID { type tester struct { tb testing.TB syncer *Syncer - localdb sql.LocalDatabase db sql.StateDatabase cfg Config - ctrl *gomock.Controller fetcher *mocks.Mockfetcher clock clockwork.FakeClock received map[types.NodeID]bool @@ -166,10 +164,8 @@ func newTester(tb testing.TB, cfg Config) *tester { return &tester{ tb: tb, syncer: syncer, - localdb: localdb, db: db, cfg: cfg, - ctrl: ctrl, fetcher: fetcher, clock: clock, received: make(map[types.NodeID]bool), diff --git a/syncer/mocks/mocks.go b/syncer/mocks/mocks.go index 6e5ea53e0f..8c67e07377 100644 --- a/syncer/mocks/mocks.go +++ b/syncer/mocks/mocks.go @@ -120,65 +120,6 @@ func (c *MocklayerTickerLayerToTimeCall) DoAndReturn(f func(types.LayerID) time. return c } -// MockmeshProvider is a mock of meshProvider interface. -type MockmeshProvider struct { - ctrl *gomock.Controller - recorder *MockmeshProviderMockRecorder -} - -// MockmeshProviderMockRecorder is the mock recorder for MockmeshProvider. -type MockmeshProviderMockRecorder struct { - mock *MockmeshProvider -} - -// NewMockmeshProvider creates a new mock instance. -func NewMockmeshProvider(ctrl *gomock.Controller) *MockmeshProvider { - mock := &MockmeshProvider{ctrl: ctrl} - mock.recorder = &MockmeshProviderMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockmeshProvider) EXPECT() *MockmeshProviderMockRecorder { - return m.recorder -} - -// SetZeroBlockLayer mocks base method. -func (m *MockmeshProvider) SetZeroBlockLayer(arg0 context.Context, arg1 types.LayerID) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "SetZeroBlockLayer", arg0, arg1) -} - -// SetZeroBlockLayer indicates an expected call of SetZeroBlockLayer. -func (mr *MockmeshProviderMockRecorder) SetZeroBlockLayer(arg0, arg1 any) *MockmeshProviderSetZeroBlockLayerCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetZeroBlockLayer", reflect.TypeOf((*MockmeshProvider)(nil).SetZeroBlockLayer), arg0, arg1) - return &MockmeshProviderSetZeroBlockLayerCall{Call: call} -} - -// MockmeshProviderSetZeroBlockLayerCall wrap *gomock.Call -type MockmeshProviderSetZeroBlockLayerCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockmeshProviderSetZeroBlockLayerCall) Return() *MockmeshProviderSetZeroBlockLayerCall { - c.Call = c.Call.Return() - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockmeshProviderSetZeroBlockLayerCall) Do(f func(context.Context, types.LayerID)) *MockmeshProviderSetZeroBlockLayerCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockmeshProviderSetZeroBlockLayerCall) DoAndReturn(f func(context.Context, types.LayerID)) *MockmeshProviderSetZeroBlockLayerCall { - c.Call = c.Call.DoAndReturn(f) - return c -} - // MockfetchLogic is a mock of fetchLogic interface. type MockfetchLogic struct { ctrl *gomock.Controller diff --git a/syncer/state_syncer_test.go b/syncer/state_syncer_test.go index 39bbda09f2..271e19755e 100644 --- a/syncer/state_syncer_test.go +++ b/syncer/state_syncer_test.go @@ -89,7 +89,7 @@ func TestProcessLayers_MultiLayers(t *testing.T) { require.True(t, exists) require.Equal(t, adopted[lid], bid) }) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT().Updates().DoAndReturn(func() []result.Layer { return fixture.RLayers( fixture.RLayer(lid, fixture.RBlock(adopted[lid], fixture.Good())), @@ -214,7 +214,7 @@ func TestProcessLayers_OpinionsNotAdopted(t *testing.T) { return tc.fetchErr }).MaxTimes(1) } - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) results := fixture.RLayers(fixture.RLayer(lid)) if tc.localCert != types.EmptyBlockID { results = fixture.RLayers( @@ -274,7 +274,7 @@ func TestProcessLayers_HareIsStillWorking(t *testing.T) { ts.mDataFetcher.EXPECT(). PollLayerOpinions(gomock.Any(), lastSynced, true, peers). Return(nil, nil, nil) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lastSynced) + ts.mTortoise.EXPECT().TallyVotes(lastSynced) ts.mTortoise.EXPECT().Updates().Return(fixture.RLayers(fixture.RLayer(lastSynced))) ts.mTortoise.EXPECT().OnApplied(lastSynced, gomock.Any()) ts.mVm.EXPECT().Apply(gomock.Any(), nil, nil) @@ -305,7 +305,7 @@ func TestProcessLayers_HareTakesTooLong(t *testing.T) { PollLayerOpinions(gomock.Any(), lid, gomock.Any(), peers). Return(nil, nil, nil) } - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT().Updates().Return(fixture.RLayers(fixture.RLayer(lid))) ts.mTortoise.EXPECT().OnApplied(lid, gomock.Any()) ts.mVm.EXPECT().Apply(lid, nil, nil) @@ -328,7 +328,7 @@ func TestProcessLayers_OpinionsOptional(t *testing.T) { ts.mDataFetcher.EXPECT(). PollLayerOpinions(gomock.Any(), lastSynced, true, peers). Return(nil, nil, errors.New("meh")) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lastSynced) + ts.mTortoise.EXPECT().TallyVotes(lastSynced) ts.mTortoise.EXPECT().Updates().Return(fixture.RLayers(fixture.RLayer(lastSynced))) ts.mTortoise.EXPECT().OnApplied(lastSynced, gomock.Any()) require.False(t, ts.syncer.stateSynced()) @@ -348,7 +348,7 @@ func TestProcessLayers_MeshHashDiverged(t *testing.T) { for lid := types.GetEffectiveGenesis().Add(1); lid.Before(current); lid = lid.Add(1) { ts.msh.SetZeroBlockLayer(context.Background(), lid) ts.mTortoise.EXPECT().OnHareOutput(lid, types.EmptyBlockID) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT(). Updates(). Return(fixture.RLayers(fixture.ROpinion(lid, types.RandomHash()))) @@ -470,7 +470,7 @@ func TestProcessLayers_MeshHashDiverged(t *testing.T) { ts.mForkFinder.EXPECT().AddResynced(instate.Sub(1), opns[2].PrevAggHash) ts.mForkFinder.EXPECT().Purge(true) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), instate) + ts.mTortoise.EXPECT().TallyVotes(instate) ts.mTortoise.EXPECT(). Updates(). Return(fixture.RLayers(fixture.ROpinion(instate.Sub(1), opns[2].PrevAggHash))) @@ -486,7 +486,7 @@ func TestProcessLayers_NoHashResolutionForNewlySyncedNode(t *testing.T) { for lid := types.GetEffectiveGenesis().Add(1); lid.Before(current); lid = lid.Add(1) { ts.msh.SetZeroBlockLayer(context.Background(), lid) ts.mTortoise.EXPECT().OnHareOutput(lid, types.EmptyBlockID) - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT(). Updates(). Return(fixture.RLayers(fixture.ROpinion(lid, types.RandomHash()))) @@ -523,7 +523,7 @@ func TestProcessLayers_NoHashResolutionForNewlySyncedNode(t *testing.T) { PollLayerOpinions(gomock.Any(), lid, gomock.Any(), peers). Return(opns, nil, nil) } - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT(). Updates(). Return(fixture.RLayers(fixture.ROpinion(lid.Sub(1), opns[2].PrevAggHash))) diff --git a/syncer/syncer.go b/syncer/syncer.go index 71332b0da3..ff52123950 100644 --- a/syncer/syncer.go +++ b/syncer/syncer.go @@ -63,9 +63,9 @@ const ( // notSynced is the state where the node is outOfSyncThreshold layers or more behind the current layer. notSynced syncState = iota // gossipSync is the state in which a node listens to at least one full layer of gossip before participating - // in the protocol. this is to protect the node from participating in the consensus without full information. - // for example, when a node wakes up in the middle of layer N, since it didn't receive all relevant messages and - // blocks of layer N, it shouldn't vote or produce blocks in layer N+1. it instead listens to gossip for all + // in the protocol. This is to protect the node from participating in the consensus without full information. + // For example, when a node wakes up in the middle of layer N, since it didn't receive all relevant messages and + // blocks of layer N, it shouldn't vote or produce blocks in layer N+1. It instead listens to gossip for all // through layer N+1 and starts producing blocks and participates in hare committee in layer N+2. gossipSync // synced is the state where the node is in sync with its peers. @@ -197,7 +197,7 @@ func NewSyncer( } if s.dataFetcher == nil { - s.dataFetcher = NewDataFetch(mesh, fetcher, tortoise, s.logger) + s.dataFetcher = NewDataFetch(fetcher, s.logger) } if s.forkFinder == nil { s.forkFinder = NewForkFinder(s.logger, cdb, fetcher, s.cfg.MaxStaleDuration) @@ -341,7 +341,7 @@ func (s *Syncer) setSyncState(ctx context.Context, newState syncState) { } // setSyncerBusy returns false if the syncer is already running a sync process. -// otherwise it sets syncer to be busy and returns true. +// Otherwise it sets syncer to be busy and returns true. func (s *Syncer) setSyncerBusy() bool { return s.isBusy.CompareAndSwap(false, true) } @@ -368,7 +368,7 @@ func (s *Syncer) lastAtxEpoch() types.EpochID { } // synchronize sync data up to the currentLayer-1 and wait for the layers to be validated. -// it returns false if the data sync failed. +// It returns false if the data sync failed. func (s *Syncer) synchronize(ctx context.Context) bool { ctx = log.WithNewSessionID(ctx) diff --git a/syncer/syncer_test.go b/syncer/syncer_test.go index f92c435765..567d9e46eb 100644 --- a/syncer/syncer_test.go +++ b/syncer/syncer_test.go @@ -132,7 +132,7 @@ func newTestSyncer(t *testing.T, interval time.Duration) *testSyncer { var err error atxsdata := atxsdata.New() exec := mesh.NewExecutor(ts.cdb, atxsdata, ts.mVm, ts.mConState, lg) - ts.msh, err = mesh.NewMesh(db, atxsdata, ts.mTicker, ts.mTortoise, exec, ts.mConState, lg) + ts.msh, err = mesh.NewMesh(db, atxsdata, ts.mTortoise, exec, ts.mConState, lg) require.NoError(t, err) cfg := Config{ @@ -256,7 +256,7 @@ func advanceState(t testing.TB, ts *testSyncer, from, to types.LayerID) { if lid.Add(ts.syncer.cfg.SyncCertDistance) > ts.mTicker.CurrentLayer() { ts.mDataFetcher.EXPECT().PollLayerOpinions(gomock.Any(), lid, false, gomock.Any()) } - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lid) + ts.mTortoise.EXPECT().TallyVotes(lid) ts.mTortoise.EXPECT().OnApplied(lid, gomock.Any()) ts.mTortoise.EXPECT().Updates().Return(fixture.RLayers(fixture.RLayer(lid))) ts.mVm.EXPECT().Apply(gomock.Any(), gomock.Any(), gomock.Any()) @@ -711,7 +711,7 @@ func TestSync_AlsoSyncProcessedLayer(t *testing.T) { ts.expectMalEnsureInSync(current) // simulate hare advancing the mesh forward - ts.mTortoise.EXPECT().TallyVotes(gomock.Any(), lyr) + ts.mTortoise.EXPECT().TallyVotes(lyr) ts.mTortoise.EXPECT().Updates().Return(fixture.RLayers(fixture.RLayer(lyr))) ts.mTortoise.EXPECT().OnApplied(lyr, gomock.Any()) ts.mVm.EXPECT().Apply(gomock.Any(), nil, nil) diff --git a/system/mocks/tortoise.go b/system/mocks/tortoise.go index 9c835290a2..2c5fea5a19 100644 --- a/system/mocks/tortoise.go +++ b/system/mocks/tortoise.go @@ -10,7 +10,6 @@ package mocks import ( - context "context" reflect "reflect" atxsdata "github.com/spacemeshos/go-spacemesh/atxsdata" @@ -337,15 +336,15 @@ func (c *MockTortoiseOnWeakCoinCall) DoAndReturn(f func(types.LayerID, bool)) *M } // TallyVotes mocks base method. -func (m *MockTortoise) TallyVotes(arg0 context.Context, arg1 types.LayerID) { +func (m *MockTortoise) TallyVotes(arg0 types.LayerID) { m.ctrl.T.Helper() - m.ctrl.Call(m, "TallyVotes", arg0, arg1) + m.ctrl.Call(m, "TallyVotes", arg0) } // TallyVotes indicates an expected call of TallyVotes. -func (mr *MockTortoiseMockRecorder) TallyVotes(arg0, arg1 any) *MockTortoiseTallyVotesCall { +func (mr *MockTortoiseMockRecorder) TallyVotes(arg0 any) *MockTortoiseTallyVotesCall { mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TallyVotes", reflect.TypeOf((*MockTortoise)(nil).TallyVotes), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TallyVotes", reflect.TypeOf((*MockTortoise)(nil).TallyVotes), arg0) return &MockTortoiseTallyVotesCall{Call: call} } @@ -361,13 +360,13 @@ func (c *MockTortoiseTallyVotesCall) Return() *MockTortoiseTallyVotesCall { } // Do rewrite *gomock.Call.Do -func (c *MockTortoiseTallyVotesCall) Do(f func(context.Context, types.LayerID)) *MockTortoiseTallyVotesCall { +func (c *MockTortoiseTallyVotesCall) Do(f func(types.LayerID)) *MockTortoiseTallyVotesCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockTortoiseTallyVotesCall) DoAndReturn(f func(context.Context, types.LayerID)) *MockTortoiseTallyVotesCall { +func (c *MockTortoiseTallyVotesCall) DoAndReturn(f func(types.LayerID)) *MockTortoiseTallyVotesCall { c.Call = c.Call.DoAndReturn(f) return c } diff --git a/system/tortoise.go b/system/tortoise.go index 8e1fdfa47b..052d3ab642 100644 --- a/system/tortoise.go +++ b/system/tortoise.go @@ -1,8 +1,6 @@ package system import ( - "context" - "github.com/spacemeshos/go-spacemesh/atxsdata" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/common/types/result" @@ -15,7 +13,7 @@ type Tortoise interface { OnBlock(types.BlockHeader) OnHareOutput(types.LayerID, types.BlockID) OnWeakCoin(types.LayerID, bool) - TallyVotes(context.Context, types.LayerID) + TallyVotes(types.LayerID) LatestComplete() types.LayerID Updates() []result.Layer OnApplied(types.LayerID, types.Hash32) bool diff --git a/systest/Dockerfile b/systest/Dockerfile index 3bec0ee12d..93fc12da1d 100644 --- a/systest/Dockerfile +++ b/systest/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22 AS build +FROM golang:1.23 AS build RUN set -ex \ && apt-get update --fix-missing \ && apt-get install -qy --no-install-recommends \ @@ -42,5 +42,5 @@ COPY --from=build /src/build/libpost.so /bin/ COPY --from=build /src/build/post-service /bin/ ENV LD_LIBRARY_PATH="/bin/" -ENV GOVERSION=1.22 +ENV GOVERSION=1.23 ENV GOTESTSUM_FORMAT=standard-quiet diff --git a/systest/validation/consensus.go b/systest/validation/consensus.go index e8e0b9fe78..dc305a10d9 100644 --- a/systest/validation/consensus.go +++ b/systest/validation/consensus.go @@ -55,7 +55,7 @@ func failMinority(failures []int, groups map[string][]int) { sameSize int ) for _, group := range groups { - //nolint:copyloopvar + // nolint:copyloopvar failed := group if len(group) > len(largest) { failed = largest diff --git a/timesync/clock.go b/timesync/clock.go index 0cf275bbe6..36c122b3b7 100644 --- a/timesync/clock.go +++ b/timesync/clock.go @@ -166,7 +166,7 @@ func (t *NodeClock) CurrentLayer() types.LayerID { } // AwaitLayer returns a channel that will be signaled when layer id layerID was ticked by the clock, -// or if this layer has passed while sleeping. it does so by closing the returned channel. +// or if this layer has passed while sleeping. It does so by closing the returned channel. func (t *NodeClock) AwaitLayer(layerID types.LayerID) <-chan struct{} { t.mu.Lock() defer t.mu.Unlock() diff --git a/timesync/peersync/sync.go b/timesync/peersync/sync.go index 436c00cf4a..80f6f14083 100644 --- a/timesync/peersync/sync.go +++ b/timesync/peersync/sync.go @@ -93,7 +93,8 @@ func WithTime(t Time) Option { // WithContext modifies parent context that is used for all operations in Sync. func WithContext(ctx context.Context) Option { return func(s *Sync) { - s.ctx = ctx + // TODO(mafa): fix this + s.ctx = ctx // nolint:fatcontext } } diff --git a/tortoise/algorithm.go b/tortoise/algorithm.go index 215051c438..f7b7e4e9f0 100644 --- a/tortoise/algorithm.go +++ b/tortoise/algorithm.go @@ -76,7 +76,6 @@ func (c *Config) WindowSizeEpochs(applied types.LayerID) types.EpochID { // Tortoise is a thread safe verifying tortoise wrapper, it just locks all actions. type Tortoise struct { logger *zap.Logger - ctx context.Context cfg Config mu sync.Mutex @@ -111,7 +110,6 @@ func WithTracer(opts ...TraceOpt) Opt { // New creates Tortoise instance. func New(atxdata *atxsdata.Data, opts ...Opt) (*Tortoise, error) { t := &Tortoise{ - ctx: context.Background(), logger: zap.NewNop(), cfg: DefaultConfig(), } @@ -256,8 +254,8 @@ type EncodeVotesOpts func(*encodeConf) // EncodeVotesWithCurrent changes last known layer that will be used for encoding votes. // // NOTE(dshulyak) why do we need this? -// tortoise computes threshold from last non-verified till the last known layer, -// since we dont download atxs before starting tortoise we won't be able to compute threshold +// Tortoise computes threshold from last non-verified till the last known layer, +// since we don't download atxs before starting tortoise we won't be able to compute threshold // based on the last clock layer (see https://github.com/spacemeshos/go-spacemesh/issues/3003) func EncodeVotesWithCurrent(current types.LayerID) EncodeVotesOpts { return func(conf *encodeConf) { @@ -265,7 +263,7 @@ func EncodeVotesWithCurrent(current types.LayerID) EncodeVotesOpts { } } -// EncodeVotes chooses a base ballot and creates a differences list. needs the hare results for latest layers. +// EncodeVotes chooses a base ballot and creates a differences list. Needs the hare results for latest layers. func (t *Tortoise) EncodeVotes( ctx context.Context, opts ...EncodeVotesOpts, @@ -302,13 +300,13 @@ func (t *Tortoise) EncodeVotes( } // TallyVotes up to the specified layer. -func (t *Tortoise) TallyVotes(ctx context.Context, lid types.LayerID) { +func (t *Tortoise) TallyVotes(lid types.LayerID) { start := time.Now() t.mu.Lock() defer t.mu.Unlock() waitTallyVotes.Observe(float64(time.Since(start).Nanoseconds())) start = time.Now() - t.trtl.tallyVotes(ctx, lid) + t.trtl.tallyVotes(lid) executeTallyVotes.Observe(float64(time.Since(start).Nanoseconds())) if t.tracer != nil { t.tracer.On(&TallyTrace{Layer: lid}) @@ -539,7 +537,7 @@ func (t *Tortoise) GetMissingActiveSet(target types.EpochID, atxs []types.ATXID) // OnApplied compares stored opinion with computed opinion and sets // pending layer to the layer above equal layer. -// this method is meant to be used only in recovery from disk codepath. +// This method is meant to be used only in recovery from disk codepath. func (t *Tortoise) OnApplied(lid types.LayerID, opinion types.Hash32) bool { t.mu.Lock() defer t.mu.Unlock() @@ -568,7 +566,7 @@ func (t *Tortoise) OnApplied(lid types.LayerID, opinion types.Hash32) bool { // latestsResults returns at most N latest results from process layer. // -// private as it meant to be used for metering. +// Private as it meant to be used for metering. func (t *Tortoise) latestsResults(n uint32) []result.Layer { t.mu.Lock() defer t.mu.Unlock() diff --git a/tortoise/fixture_test.go b/tortoise/fixture_test.go index cf6fd691de..c0c5056710 100644 --- a/tortoise/fixture_test.go +++ b/tortoise/fixture_test.go @@ -1,7 +1,6 @@ package tortoise import ( - "context" "fmt" "math/rand/v2" "sort" @@ -428,7 +427,7 @@ func (t *tallyAction) String() string { } func (t *tallyAction) execute(trt *Tortoise) { - trt.TallyVotes(context.Background(), types.LayerID(t.lid)) + trt.TallyVotes(types.LayerID(t.lid)) } func (s *session) tally(lid int) { diff --git a/tortoise/model/core.go b/tortoise/model/core.go index 22a1040ffe..bc51c35f11 100644 --- a/tortoise/model/core.go +++ b/tortoise/model/core.go @@ -134,14 +134,14 @@ func (c *core) OnMessage(m Messenger, event Message) { m.Send(MessageBallot{Ballot: ballot}) case MessageLayerEnd: if ev.LayerID.After(types.GetEffectiveGenesis()) { - tortoise.RecoverLayer(context.Background(), + tortoise.RecoverLayer( c.tortoise, c.cdb.Database, c.atxdata, ev.LayerID, c.tortoise.OnBallot, ) - c.tortoise.TallyVotes(context.Background(), ev.LayerID) + c.tortoise.TallyVotes(ev.LayerID) m.Notify(EventVerified{ID: c.id, Verified: c.tortoise.LatestComplete(), Layer: ev.LayerID}) } diff --git a/tortoise/recover.go b/tortoise/recover.go index 6a150d1318..04c8d5c85d 100644 --- a/tortoise/recover.go +++ b/tortoise/recover.go @@ -85,7 +85,7 @@ func Recover( return nil, ctx.Err() default: } - if err := RecoverLayer(ctx, trtl, db, atxdata, lid, trtl.OnRecoveredBallot); err != nil { + if err := RecoverLayer(trtl, db, atxdata, lid, trtl.OnRecoveredBallot); err != nil { return nil, fmt.Errorf("failed to load tortoise state at layer %d: %w", lid, err) } } @@ -108,7 +108,7 @@ func Recover( if last < start { return trtl, nil } - trtl.TallyVotes(ctx, last) + trtl.TallyVotes(last) // find topmost layer that was already applied with same result // and reset pending so that result for that layer is not returned for prev := valid; prev >= start; prev-- { @@ -140,7 +140,6 @@ func recoverEpoch(target types.EpochID, trtl *Tortoise, db sql.Executor, atxdata type ballotFunc func(*types.BallotTortoiseData) func RecoverLayer( - ctx context.Context, trtl *Tortoise, db sql.Executor, atxdata *atxsdata.Data, diff --git a/tortoise/recover_test.go b/tortoise/recover_test.go index be41f02dd6..b6f8770b3e 100644 --- a/tortoise/recover_test.go +++ b/tortoise/recover_test.go @@ -26,19 +26,18 @@ type recoveryAdapter struct { next types.LayerID } -func (a *recoveryAdapter) TallyVotes(ctx context.Context, current types.LayerID) { +func (a *recoveryAdapter) TallyVotes(current types.LayerID) { genesis := types.GetEffectiveGenesis() if a.next == 0 { a.next = genesis } for ; a.next <= current; a.next++ { - require.NoError(a, RecoverLayer(ctx, a.Tortoise, a.db, a.atxdata, a.next, a.OnBallot)) - a.Tortoise.TallyVotes(ctx, a.next) + require.NoError(a, RecoverLayer(a.Tortoise, a.db, a.atxdata, a.next, a.OnBallot)) + a.Tortoise.TallyVotes(a.next) } } func TestRecoverState(t *testing.T) { - ctx := context.Background() const size = 10 s := sim.New(sim.WithLayerSize(size)) s.Setup() @@ -51,7 +50,7 @@ func TestRecoverState(t *testing.T) { var last, verified types.LayerID for i := 0; i < 50; i++ { last = s.Next() - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -68,7 +67,7 @@ func TestRecoverState(t *testing.T) { verified = tortoise2.LatestComplete() require.Equal(t, last.Sub(1), verified) tortoiseFromSimState(t, s.GetState(0), WithLogger(lg), WithConfig(cfg)) - tortoise2.TallyVotes(ctx, last) + tortoise2.TallyVotes(last) verified = tortoise2.LatestComplete() require.Equal(t, last.Sub(1), verified) } @@ -103,7 +102,7 @@ func TestRecoverWithOpinion(t *testing.T) { trt := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(lg)) for _, lid := range sim.GenLayers(s, sim.WithSequence(10)) { - trt.TallyVotes(context.Background(), lid) + trt.TallyVotes(lid) } var last result.Layer for _, rst := range trt.Updates() { @@ -146,7 +145,7 @@ func TestResetPending(t *testing.T) { var last types.LayerID for _, lid := range sim.GenLayers(s, sim.WithSequence(n)) { last = lid - trt.TallyVotes(context.Background(), lid) + trt.TallyVotes(lid) } updates1 := trt.Updates() require.Len(t, updates1, n+1) @@ -193,7 +192,7 @@ func TestWindowRecovery(t *testing.T) { var last types.LayerID for _, lid := range sim.GenLayers(s, sim.WithSequence(n)) { last = lid - trt.TallyVotes(context.Background(), lid) + trt.TallyVotes(lid) } updates1 := trt.Updates() require.Len(t, updates1, n+1) @@ -236,7 +235,7 @@ func TestRecoverOnlyAtxs(t *testing.T) { // this creates a layer without any ballots, so we will also won't have them in the database for _, lid := range sim.GenLayers(s, sim.WithSequence(10, sim.WithLayerSizeOverwrite(0))) { last = lid - trt.TallyVotes(context.Background(), lid) + trt.TallyVotes(lid) } future := last + 1000 recovered, err := Recover(context.Background(), s.GetState(0).DB.Database, s.GetState(0).Atxdata, future, diff --git a/tortoise/rerun_test.go b/tortoise/rerun_test.go index ccf9ab9407..29067d93b0 100644 --- a/tortoise/rerun_test.go +++ b/tortoise/rerun_test.go @@ -1,7 +1,6 @@ package tortoise import ( - "context" "testing" "time" @@ -14,7 +13,6 @@ import ( ) func TestRerunRevertNonverifiedLayers(t *testing.T) { - ctx := context.Background() const ( size = 10 good = 10 @@ -32,7 +30,7 @@ func TestRerunRevertNonverifiedLayers(t *testing.T) { sim.WithSequence(good), sim.WithSequence(5, sim.WithVoteGenerator(splitVoting(size))), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } expected := types.GetEffectiveGenesis().Add(good - 1) @@ -47,7 +45,6 @@ func TestWindowSizeVoteCounting(t *testing.T) { func testWindowCounting(tb testing.TB, maliciousLayers, windowSize int, expectedValidity bool) { genesis := types.GetEffectiveGenesis() - ctx := context.Background() const size = 4 s := sim.New(sim.WithLayerSize(size)) s.Setup(sim.WithSetupMinerRange(size, size)) @@ -78,7 +75,7 @@ func testWindowCounting(tb testing.TB, maliciousLayers, windowSize int, expected ), sim.WithSequence(10, sim.WithEmptyHareOutput(), sim.WithNumBlocks(1)), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) processBlockUpdates(tb, tortoise, s.GetState(0).DB) } require.Equal(tb, last.Sub(1), tortoise.LatestComplete()) @@ -128,7 +125,6 @@ func benchmarkTallyVotes(b *testing.B, size int, windowsize uint32, opts ...sim. ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = layerSize cfg.WindowSize = windowsize @@ -143,12 +139,12 @@ func benchmarkTallyVotes(b *testing.B, size int, windowsize uint32, opts ...sim. } b.Log("generated state", time.Since(start)) // count ballots and form initial opinion - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) b.Log("loaded state", time.Since(start)) b.ResetTimer() for i := 0; i < b.N; i++ { // benchmark how long it takes to recheck all layers within the sliding window - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } } diff --git a/tortoise/sim/votes.go b/tortoise/sim/votes.go index b1d66eb91c..8087b8b7ce 100644 --- a/tortoise/sim/votes.go +++ b/tortoise/sim/votes.go @@ -14,7 +14,7 @@ type Voting = types.Votes type VotesGenerator func(rng *rand.Rand, layers []*types.Layer, i int) Voting // PerfectVoting selects base ballot from previous layer and supports all blocks from previous layer. -// used by default. +// Used by default. func PerfectVoting(rng *rand.Rand, layers []*types.Layer, _ int) Voting { baseLayer := layers[len(layers)-1] ballots := baseLayer.Ballots() diff --git a/tortoise/state.go b/tortoise/state.go index 6480cc263e..48cb1a0a2e 100644 --- a/tortoise/state.go +++ b/tortoise/state.go @@ -204,11 +204,6 @@ func (l *layerInfo) computeOpinion(hdist uint32, last types.LayerID) { } type ( - baseInfo struct { - id types.BallotID - layer types.LayerID - } - conditions struct { // set after comparing with local beacon badBeacon bool @@ -226,7 +221,6 @@ type ( ballotInfo struct { id types.BallotID layer types.LayerID - base baseInfo malicious bool weight weight reference *referenceInfo @@ -434,7 +428,7 @@ type headerWithSign struct { sign sign } -func decodeVotes(evicted, blid types.LayerID, base *ballotInfo, exceptions types.Votes) (votes, types.LayerID, error) { +func decodeVotes(_, blid types.LayerID, base *ballotInfo, exceptions types.Votes) (votes, types.LayerID, error) { from := base.layer diff := map[types.LayerID]map[types.BlockID]headerWithSign{} for _, header := range exceptions.Against { diff --git a/tortoise/threshold.go b/tortoise/threshold.go index 3cfa46eb8d..d931b2d0dc 100644 --- a/tortoise/threshold.go +++ b/tortoise/threshold.go @@ -9,11 +9,11 @@ import ( ) const ( - // by assumption adversarial weight can't be larger than 1/3. + // By assumption adversarial weight can't be larger than 1/3. adversarialWeightFraction = 3 - // nodes should not be on different sides of the local threshold if they receive different adversarial votes. + // Nodes should not be on different sides of the local threshold if they receive different adversarial votes. localThresholdFraction = 3 - // for comleteness: + // For completeness: // global threshold is set in a such way so that if adversary // cancels their weight (adversarialWeightFraction) - honest nodes should still cross local threshold. ) diff --git a/tortoise/tortoise.go b/tortoise/tortoise.go index b51f052bda..e159a2d082 100644 --- a/tortoise/tortoise.go +++ b/tortoise/tortoise.go @@ -284,7 +284,7 @@ func (t *turtle) encodeVotes( } // getFullVote unlike getLocalVote will vote according to the counted votes on blocks that are -// outside of hdist. if opinion is undecided according to the votes it will use coinflip recorded +// outside of hdist. If opinion is undecided according to the votes it will use coinflip recorded // in the current layer. func (t *turtle) getFullVote(verified, current types.LayerID, block *blockInfo) (sign, voteReason, error) { if !block.data { @@ -320,7 +320,7 @@ func (t *turtle) updateLast(last types.LayerID) { } } -func (t *turtle) tallyVotes(ctx context.Context, last types.LayerID) { +func (t *turtle) tallyVotes(last types.LayerID) { defer t.evict() t.logger.Debug("on layer", zap.Uint32("last", last.Uint32())) @@ -744,11 +744,7 @@ func (t *turtle) decodeBallot(ballot *types.BallotTortoiseData) (*ballotInfo, ty } binfo := &ballotInfo{ - id: ballot.ID, - base: baseInfo{ - id: base.id, - layer: base.layer, - }, + id: ballot.ID, reference: refinfo, layer: ballot.Layer, malicious: ballot.Malicious || t.isMalfeasant(ballot.Smesher), diff --git a/tortoise/tortoise_test.go b/tortoise/tortoise_test.go index 9700cada28..addaf30a2e 100644 --- a/tortoise/tortoise_test.go +++ b/tortoise/tortoise_test.go @@ -58,7 +58,6 @@ func TestLayerPatterns(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size tortoise := tortoiseFromSimState( @@ -76,7 +75,7 @@ func TestLayerPatterns(t *testing.T) { sim.WithSequence(5), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -86,7 +85,6 @@ func TestLayerPatterns(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = 4 @@ -107,7 +105,7 @@ func TestLayerPatterns(t *testing.T) { sim.WithSequence(2, sim.WithEmptyHareOutput()), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } require.Equal(t, genesis.Add(4), tortoise.LatestComplete()) @@ -115,7 +113,7 @@ func TestLayerPatterns(t *testing.T) { sim.WithSequence(2), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) }) @@ -124,7 +122,6 @@ func TestLayerPatterns(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size tortoise := tortoiseFromSimState( @@ -146,7 +143,7 @@ func TestLayerPatterns(t *testing.T) { sim.WithSequence(30), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -160,7 +157,6 @@ func TestAbstainsInMiddle(t *testing.T) { ) s.Setup(sim.WithSetupMinerRange(size, size)) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = 10 @@ -170,21 +166,21 @@ func TestAbstainsInMiddle(t *testing.T) { var last, verified types.LayerID for i := 0; i < 5; i++ { last = s.Next(sim.WithNumBlocks(1), sim.WithVoteGenerator(tortoiseVoting(tortoise))) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) expected := last for i := 0; i < 2; i++ { - tortoise.TallyVotes(ctx, s.Next( + tortoise.TallyVotes(s.Next( sim.WithNumBlocks(1), sim.WithVoteGenerator(tortoiseVoting(tortoise)), sim.WithoutHareOutput(), )) } for i := 0; i < int(cfg.Zdist); i++ { - tortoise.TallyVotes(ctx, s.Next( + tortoise.TallyVotes(s.Next( sim.WithNumBlocks(1), sim.WithVoteGenerator(tortoiseVoting(tortoise)), )) @@ -202,7 +198,6 @@ func TestAbstainLateBlock(t *testing.T) { ) s.Setup(sim.WithSetupMinerRange(size, size)) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = 2 @@ -216,7 +211,7 @@ func TestAbstainLateBlock(t *testing.T) { sim.WithoutHareOutput(), sim.WithVoteGenerator(abstainVoting), ) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) events := tortoise.Updates() require.Len(t, events, 4) @@ -228,7 +223,7 @@ func TestAbstainLateBlock(t *testing.T) { block := types.BlockHeader{ID: types.BlockID{1}, LayerID: last.Sub(1)} tortoise.OnBlock(block) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) events = tortoise.Updates() require.Len(t, events, 1) @@ -242,7 +237,6 @@ func TestEncodeAbstainVotesForZdist(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = zdist @@ -256,7 +250,7 @@ func TestEncodeAbstainVotesForZdist(t *testing.T) { sim.WithSequence(1), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -289,7 +283,6 @@ func TestEncodeAbstainVotesDelayedHare(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t))) @@ -301,11 +294,11 @@ func TestEncodeAbstainVotesDelayedHare(t *testing.T) { sim.WithSequence(1, sim.WithNumBlocks(1)), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } require.Equal(t, last.Sub(3), tortoise.LatestComplete()) - tortoise.TallyVotes(ctx, last.Add(1)) + tortoise.TallyVotes(last.Add(1)) votes, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(last.Add(1))) require.NoError(t, err) blocks, err := blocks.Layer(s.GetState(0).DB, last) @@ -515,7 +508,6 @@ func TestOutOfOrderLayersAreVerified(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t))) @@ -530,7 +522,7 @@ func TestOutOfOrderLayersAreVerified(t *testing.T) { sim.WithSequence(3), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -566,7 +558,6 @@ func TestLongTermination(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = zdist @@ -587,7 +578,7 @@ func TestLongTermination(t *testing.T) { if i == skip { continue } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -614,7 +605,6 @@ func TestLongTermination(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup(sim.WithSetupMinerRange(4, 4)) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = zdist @@ -639,13 +629,13 @@ func TestLongTermination(t *testing.T) { if i == skip { continue } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, types.GetEffectiveGenesis().Add(skip).Sub(1), verified) // switch to full mode happens here last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() require.Equal(t, last.Sub(1), verified) processBlockUpdates(t, tortoise, s.GetState(0).DB) @@ -671,7 +661,6 @@ func TestLongTermination(t *testing.T) { s := sim.New(sim.WithLayerSize(size)) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = zdist @@ -696,7 +685,7 @@ func TestLongTermination(t *testing.T) { if i == skip { continue } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -724,7 +713,6 @@ func benchmarkLayersHandling(b *testing.B, opts ...sim.NextOpt) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size @@ -737,7 +725,7 @@ func benchmarkLayersHandling(b *testing.B, opts ...sim.NextOpt) { for i := 0; i < b.N; i++ { tortoise := tortoiseFromSimState(b, s.GetState(0), WithConfig(cfg)) for _, lid := range lids { - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } } } @@ -759,7 +747,6 @@ func benchmarkBaseBallot(b *testing.B, opts ...sim.NextOpt) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.WindowSize = 100 @@ -768,14 +755,14 @@ func benchmarkBaseBallot(b *testing.B, opts ...sim.NextOpt) { var last, verified types.LayerID for i := 0; i < 400; i++ { last = s.Next(opts...) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(b, last.Sub(1), verified) b.ResetTimer() for i := 0; i < b.N; i++ { - tortoise.EncodeVotes(ctx) + tortoise.EncodeVotes(context.Background()) } } @@ -821,8 +808,6 @@ func TestBallotHasGoodBeacon(t *testing.T) { } func TestBallotsNotProcessedWithoutBeacon(t *testing.T) { - ctx := context.Background() - s := sim.New() s.Setup() simState := s.GetState(0) @@ -834,21 +819,19 @@ func TestBallotsNotProcessedWithoutBeacon(t *testing.T) { require.NoError(t, err) require.NoError(t, beacons.Set(simState.DB, last.GetEpoch(), types.EmptyBeacon)) - tortoise.TallyVotes(ctx, last) - _, err = tortoise.EncodeVotes(ctx) + tortoise.TallyVotes(last) + _, err = tortoise.EncodeVotes(context.Background()) require.Error(t, err) require.NoError(t, beacons.Set(simState.DB, last.GetEpoch(), beacon)) // Recover layer so it picks up the beacon and retry tallying votes in the last layer - require.NoError(t, RecoverLayer(ctx, tortoise.Tortoise, tortoise.db, simState.Atxdata, last, tortoise.OnBallot)) - tortoise.Tortoise.TallyVotes(ctx, last) - _, err = tortoise.EncodeVotes(ctx) + require.NoError(t, RecoverLayer(tortoise.Tortoise, tortoise.db, simState.Atxdata, last, tortoise.OnBallot)) + tortoise.Tortoise.TallyVotes(last) + _, err = tortoise.EncodeVotes(context.Background()) require.NoError(t, err) } func TestVotesDecodingWithoutBaseBallot(t *testing.T) { - ctx := context.Background() - t.Run("AllNotDecoded", func(t *testing.T) { s := sim.New() s.Setup() @@ -863,7 +846,7 @@ func TestVotesDecodingWithoutBaseBallot(t *testing.T) { var verified types.LayerID for _, last := range sim.GenLayers(s, sim.WithSequence(2, sim.WithVoteGenerator(voteWithBaseBallot(types.BallotID{1, 1, 1})))) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, types.GetEffectiveGenesis(), verified) @@ -892,7 +875,7 @@ func TestVotesDecodingWithoutBaseBallot(t *testing.T) { return sim.ConsistentVoting(rng, layers, i) }) for _, last = range sim.GenLayers(s, sim.WithSequence(2, generator)) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -911,7 +894,7 @@ func TestDecodeVotes(t *testing.T) { WithLogger(zaptest.NewLogger(t)), ) last := s.Next() - tortoise.TallyVotes(context.TODO(), last) + tortoise.TallyVotes(last) ballots, err := ballots.Layer(s.GetState(0).DB, last) require.NoError(t, err) ballot := types.NewExistingBallot( @@ -989,8 +972,8 @@ func olderExceptions(rng *rand.Rand, layers []*types.Layer, _ int) sim.Voting { return voting } -// outOfWindowBaseBallot creates VotesGenerator with a specific window. -// vote generator will produce one block that uses base ballot outside the sliding window. +// OutOfWindowBaseBallot creates VotesGenerator with a specific window. +// Vote generator will produce one block that uses base ballot outside the sliding window. // NOTE that it will produce blocks as if it didn't know about blocks from higher layers. func outOfWindowBaseBallot(n, window int) sim.VotesGenerator { return func(rng *rand.Rand, layers []*types.Layer, i int) sim.Voting { @@ -1020,7 +1003,7 @@ type voter interface { // tortoiseVoting is for testing that protocol makes progress using heuristic that we are // using for the network. func tortoiseVoting(tortoise voter) sim.VotesGenerator { - return func(rng *rand.Rand, layers []*types.Layer, i int) sim.Voting { + return func(rng *rand.Rand, layers []*types.Layer, _ int) sim.Voting { votes, err := tortoise.EncodeVotes(context.Background()) if err != nil { panic(err) @@ -1030,7 +1013,7 @@ func tortoiseVoting(tortoise voter) sim.VotesGenerator { } func tortoiseVotingWithCurrent(tortoise voter) sim.VotesGenerator { - return func(rng *rand.Rand, layers []*types.Layer, i int) sim.Voting { + return func(rng *rand.Rand, layers []*types.Layer, _ int) sim.Voting { current := types.GetEffectiveGenesis().Add(1) if len(layers) > 0 { current = layers[len(layers)-1].Index().Add(1) @@ -1068,14 +1051,12 @@ func TestOnBeacon(t *testing.T) { } func TestBaseBallotGenesis(t *testing.T) { - ctx := context.Background() - s := sim.New() cfg := defaultTestConfig() tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t))) - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) require.Empty(t, votes.Support) require.Empty(t, votes.Against) @@ -1117,7 +1098,6 @@ func TestBaseBallotEvictedBlock(t *testing.T) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.WindowSize = 10 @@ -1136,17 +1116,17 @@ func TestBaseBallotEvictedBlock(t *testing.T) { last = lid updates := tortoise.Updates() // drain pending tortoise.OnApplied(updates[0].Layer, updates[0].Opinion) - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) for i := 0; i < 10; i++ { - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) ensureBaseAndExceptionsFromLayer(t, last, votes, s.GetState(0).DB) last = s.Next(sim.WithVoteGenerator(tortoiseVoting(tortoise))) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() require.Equal(t, last.Sub(1), verified) } @@ -1203,7 +1183,6 @@ func TestBaseBallotPrioritization(t *testing.T) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.WindowSize = tc.window @@ -1215,10 +1194,10 @@ func TestBaseBallotPrioritization(t *testing.T) { ) for _, lid := range sim.GenLayers(s, tc.seqs...) { - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) ballot, err := ballots.Get(s.GetState(0).DB, votes.Base) require.NoError(t, err) @@ -1303,7 +1282,6 @@ func TestWeakCoinVoting(t *testing.T) { sim.WithSetupMinerRange(size, size), ) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = hdist @@ -1329,12 +1307,12 @@ func TestWeakCoinVoting(t *testing.T) { ), ) { last = lid - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } require.Equal(t, genesis, tortoise.LatestComplete()) require.NoError(t, layers.SetWeakCoin(s.GetState(0).DB, last.Add(1), true)) - votes, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(last.Add(1))) + votes, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(last.Add(1))) require.NoError(t, err) require.Len(t, votes.Support, 2) @@ -1344,7 +1322,7 @@ func TestWeakCoinVoting(t *testing.T) { for i := 0; i < 10; i++ { last = s.Next(sim.WithVoteGenerator(tortoiseVoting(tortoise))) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) } @@ -1356,7 +1334,6 @@ func TestVoteAgainstSupportedByBaseBallot(t *testing.T) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = 1 @@ -1375,7 +1352,7 @@ func TestVoteAgainstSupportedByBaseBallot(t *testing.T) { for _, last = range sim.GenLayers(s, sim.WithSequence(3, sim.WithNumBlocks(1)), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -1399,7 +1376,7 @@ func TestVoteAgainstSupportedByBaseBallot(t *testing.T) { ballot.conditions.badBeacon = true } - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) ensureBallotLayerWithin(t, s.GetState(0).DB, votes.Base, last, last) @@ -1476,14 +1453,13 @@ func TestComputeLocalOpinion(t *testing.T) { ) s.Setup(sim.WithSetupUnitsRange(1, 1)) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = hdist cfg.Zdist = hdist tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg)) for _, lid := range sim.GenLayers(s, tc.seqs...) { - tortoise.TallyVotes(ctx, lid) + tortoise.TallyVotes(lid) } blks, err := blocks.Layer(s.GetState(0).DB, tc.lid) @@ -1668,7 +1644,6 @@ func TestNetworkRecoversFromFullPartition(t *testing.T) { sim.WithSetupMinerRange(8, 8), ) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = 3 @@ -1685,8 +1660,8 @@ func TestNetworkRecoversFromFullPartition(t *testing.T) { for i := 0; i < int(types.GetLayersPerEpoch()); i++ { last = s1.Next(sim.WithNumBlocks(1)) - tortoise1.TallyVotes(ctx, last) - tortoise2.TallyVotes(ctx, last) + tortoise1.TallyVotes(last) + tortoise2.TallyVotes(last) processBlockUpdates(t, tortoise1, s1.GetState(0).DB) processBlockUpdates(t, tortoise2, s1.GetState(1).DB) } @@ -1700,8 +1675,8 @@ func TestNetworkRecoversFromFullPartition(t *testing.T) { partitionStart := last for i := 0; i < int(types.GetLayersPerEpoch()); i++ { last = s1.Next(sim.WithNumBlocks(1)) - tortoise1.TallyVotes(ctx, last) - tortoise2.TallyVotes(ctx, s2.Next(sim.WithNumBlocks(1))) + tortoise1.TallyVotes(last) + tortoise2.TallyVotes(s2.Next(sim.WithNumBlocks(1))) processBlockUpdates(t, tortoise1, s1.GetState(0).DB) processBlockUpdates(t, tortoise2, s2.GetState(0).DB) } @@ -1731,8 +1706,8 @@ func TestNetworkRecoversFromFullPartition(t *testing.T) { } } - tortoise1.TallyVotes(ctx, last) - tortoise2.TallyVotes(ctx, last) + tortoise1.TallyVotes(last) + tortoise2.TallyVotes(last) processBlockUpdates(t, tortoise1, s1.GetState(0).DB) processBlockUpdates(t, tortoise2, s1.GetState(0).DB) @@ -1747,8 +1722,8 @@ func TestNetworkRecoversFromFullPartition(t *testing.T) { return tortoiseVoting(tortoise2)(rng, layers, i) }), ) - tortoise1.TallyVotes(ctx, last) - tortoise2.TallyVotes(ctx, last) + tortoise1.TallyVotes(last) + tortoise2.TallyVotes(last) processBlockUpdates(t, tortoise1, s1.GetState(0).DB) processBlockUpdates(t, tortoise2, s1.GetState(0).DB) } @@ -1780,7 +1755,6 @@ func TestVerifyLayerByWeightNotSize(t *testing.T) { sim.WithSetupMinerRange(size, size), ) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t))) @@ -1790,7 +1764,7 @@ func TestVerifyLayerByWeightNotSize(t *testing.T) { sim.WithSequence(2, sim.WithNumBlocks(1)), sim.WithSequence(1, sim.WithNumBlocks(1), sim.WithLayerSizeOverwrite(size/3)), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(3), tortoise.LatestComplete()) } @@ -1818,7 +1792,6 @@ func abstainVoting(_ *rand.Rand, layers []*types.Layer, _ int) sim.Voting { } func TestAbstainVotingVerifyingMode(t *testing.T) { - ctx := context.Background() const size = 10 s := sim.New(sim.WithLayerSize(size)) s.Setup() @@ -1834,14 +1807,14 @@ func TestAbstainVotingVerifyingMode(t *testing.T) { sim.VaryingVoting(1, perfectVotingFirstBaseBallot, abstainVoting), )), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(2), verified) for _, last = range sim.GenLayers(s, sim.WithSequence(1, sim.WithVoteGenerator(perfectVotingFirstBaseBallot)), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -1876,7 +1849,6 @@ func addAgainst(vote types.Vote) sim.VotesGenerator { } func TestLateBaseBallot(t *testing.T) { - ctx := context.Background() const size = 10 s := sim.New(sim.WithLayerSize(size)) s.Setup(sim.WithSetupUnitsRange(2, 2)) @@ -1891,7 +1863,7 @@ func TestLateBaseBallot(t *testing.T) { for _, last = range sim.GenLayers(s, sim.WithSequence(2, sim.WithEmptyHareOutput()), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } @@ -1912,7 +1884,7 @@ func TestLateBaseBallot(t *testing.T) { sim.WithSequence(1, sim.WithVoteGenerator(voteWithBaseBallot(base.ID()))), sim.WithSequence(1), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } @@ -1920,7 +1892,6 @@ func TestLateBaseBallot(t *testing.T) { } func TestLateBlock(t *testing.T) { - ctx := context.Background() const size = 10 s := sim.New(sim.WithLayerSize(size)) s.Setup(sim.WithSetupUnitsRange(2, 2)) @@ -1932,7 +1903,7 @@ func TestLateBlock(t *testing.T) { tortoise := tortoiseFromSimState(t, s.GetState(0), WithLogger(zaptest.NewLogger(t)), WithConfig(cfg)) last := s.Next() - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) blks, err := blocks.Layer(s.GetState(0).DB, last) require.NoError(t, err) @@ -1952,7 +1923,7 @@ func TestLateBlock(t *testing.T) { sim.WithSequence(1, sim.WithVoteGenerator(voteForBlock(&block))), sim.WithSequence(1), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) @@ -1964,7 +1935,6 @@ func TestLateBlock(t *testing.T) { } func TestMaliciousBallotsAreIgnored(t *testing.T) { - ctx := context.Background() const size = 10 s := sim.New(sim.WithLayerSize(size)) s.Setup() @@ -1983,10 +1953,10 @@ func TestMaliciousBallotsAreIgnored(t *testing.T) { tortoise.OnMalfeasance(ballot.SmesherID) } - tortoise.TallyVotes(ctx, s.Next()) + tortoise.TallyVotes(s.Next()) require.Equal(t, tortoise.LatestComplete(), types.GetEffectiveGenesis()) - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) require.Empty(t, votes.Base) } @@ -1997,7 +1967,6 @@ func TestStateManagement(t *testing.T) { hdist = 4 window = 2 ) - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.Hdist = hdist @@ -2015,7 +1984,7 @@ func TestStateManagement(t *testing.T) { for _, last = range sim.GenLayers(s, sim.WithSequence(20), ) { - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) verified = tortoise.LatestComplete() } require.Equal(t, last.Sub(1), verified) @@ -2064,14 +2033,13 @@ func TestFutureHeight(t *testing.T) { tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t)), ) - tortoise.TallyVotes(context.Background(), - s.Next(sim.WithNumBlocks(1), sim.WithBlockTickHeights(100_000))) + tortoise.TallyVotes(s.Next(sim.WithNumBlocks(1), sim.WithBlockTickHeights(100_000))) for i := 0; i < int(cfg.Hdist)-1; i++ { - tortoise.TallyVotes(context.Background(), s.Next()) + tortoise.TallyVotes(s.Next()) } require.Equal(t, types.GetEffectiveGenesis(), tortoise.LatestComplete()) last := s.Next() - tortoise.TallyVotes(context.Background(), last) + tortoise.TallyVotes(last) // verifies layer by counting all votes require.Equal(t, last.Sub(1), tortoise.LatestComplete()) }) @@ -2099,15 +2067,11 @@ func TestFutureHeight(t *testing.T) { tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t)), ) - tortoise.TallyVotes( - context.Background(), - s.Next(sim.WithNumBlocks(1), sim.WithBlockTickHeights(slow+1)), - ) - tortoise.TallyVotes(context.Background(), - s.Next(sim.WithoutHareOutput(), sim.WithNumBlocks(0))) + tortoise.TallyVotes(s.Next(sim.WithNumBlocks(1), sim.WithBlockTickHeights(slow+1))) + tortoise.TallyVotes(s.Next(sim.WithoutHareOutput(), sim.WithNumBlocks(0))) // 3 is handpicked so that threshold will be crossed if bug wasn't fixed for i := 0; i < 3; i++ { - tortoise.TallyVotes(context.Background(), s.Next(sim.WithNumBlocks(1))) + tortoise.TallyVotes(s.Next(sim.WithNumBlocks(1))) } require.Equal(t, types.GetEffectiveGenesis().String(), tortoise.LatestComplete().String()) @@ -2138,7 +2102,7 @@ func TestFutureHeight(t *testing.T) { sim.WithBlockTickHeights(slow+1), sim.WithVoteGenerator(sim.ConsistentVoting), ) - tortoise.TallyVotes(context.Background(), last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(2), tortoise.LatestComplete()) }) @@ -2160,7 +2124,7 @@ func TestFutureHeight(t *testing.T) { var last types.LayerID for i := 0; i < int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(0)) - tortoise.TallyVotes(context.Background(), last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) }) @@ -2169,7 +2133,6 @@ func TestFutureHeight(t *testing.T) { func testEmptyLayers(t *testing.T, hdist int) { const size = 4 - ctx := context.Background() cfg := defaultTestConfig() cfg.Hdist = uint32(hdist) cfg.Zdist = 3 @@ -2200,7 +2163,7 @@ func testEmptyLayers(t *testing.T, hdist int) { opts = append(opts, sim.WithNumBlocks(1)) } last = s.Next(opts...) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, types.GetEffectiveGenesis().Add(uint32(skipFrom)), tortoise.LatestComplete()) for i := 0; i <= int(cfg.Hdist); i++ { @@ -2208,7 +2171,7 @@ func testEmptyLayers(t *testing.T, hdist int) { sim.WithNumBlocks(1), sim.WithVoteGenerator(tortoiseVoting(tortoise)), ) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) } @@ -2226,8 +2189,6 @@ func TestSwitchMode(t *testing.T) { t.Run("temporary inconsistent", func(t *testing.T) { const size = 4 - ctx := context.Background() - cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = 2 @@ -2246,20 +2207,18 @@ func TestSwitchMode(t *testing.T) { for i := 0; i <= int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(1), sim.WithEmptyHareOutput()) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.True(t, tortoise.trtl.isFull) for i := 0; i <= int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.False(t, tortoise.trtl.isFull) }) t.Run("loaded validity", func(t *testing.T) { const size = 4 - ctx := context.Background() - cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = 2 @@ -2278,7 +2237,7 @@ func TestSwitchMode(t *testing.T) { for i := 0; i <= int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(1), sim.WithEmptyHareOutput()) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.True(t, tortoise.trtl.isFull) tortoise1 := tortoiseFromSimState(t, @@ -2286,16 +2245,14 @@ func TestSwitchMode(t *testing.T) { ) for i := 0; i <= int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise1.TallyVotes(ctx, last) + tortoise1.TallyVotes(last) } - tortoise1.TallyVotes(ctx, last) + tortoise1.TallyVotes(last) require.False(t, tortoise1.trtl.isFull) }) t.Run("changed to hare", func(t *testing.T) { const size = 4 - ctx := context.Background() - cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = 2 @@ -2316,7 +2273,7 @@ func TestSwitchMode(t *testing.T) { for i := 0; i < int(cfg.Hdist)-1; i++ { last = s.Next(sim.WithNumBlocks(1)) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) layer := tortoise.trtl.layer(types.GetEffectiveGenesis().Add(1)) require.Len(t, layer.blocks, 1) require.Equal(t, against, layer.blocks[0].validity) @@ -2327,19 +2284,17 @@ func TestSwitchMode(t *testing.T) { LayerID: block.layer, Height: block.height, }))) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) for i := 0; i < 10; i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.False(t, tortoise.trtl.isFull) }) t.Run("count after switch back", func(t *testing.T) { const size = 4 - ctx := context.Background() - cfg := defaultTestConfig() cfg.LayerSize = size cfg.Zdist = 2 @@ -2358,7 +2313,7 @@ func TestSwitchMode(t *testing.T) { last := nohare for i := 0; i < int(cfg.Hdist); i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } events := tortoise.Updates() require.Len(t, events, int(cfg.Hdist)+2) // hdist, genesis and last processed @@ -2402,7 +2357,7 @@ func TestSwitchMode(t *testing.T) { ballot.EligibilityProofs = template.EligibilityProofs tortoise.OnBallot(ballot.ToTortoiseData()) } - tortoise.Tortoise.TallyVotes(ctx, last) + tortoise.Tortoise.TallyVotes(last) events = tortoise.Updates() require.Len(t, events, 3) require.Equal(t, events[0].Layer, nohare) @@ -2417,7 +2372,6 @@ func TestSwitchMode(t *testing.T) { func TestOnBallotComputeOpinion(t *testing.T) { const size = 4 - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.WindowSize = 10 @@ -2436,7 +2390,7 @@ func TestOnBallotComputeOpinion(t *testing.T) { var last types.LayerID for i := 0; i < distance; i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } rst, err := ballots.Layer(s.GetState(0).DB, last) @@ -2482,7 +2436,7 @@ func TestOnBallotComputeOpinion(t *testing.T) { var last types.LayerID for i := 0; i < distance; i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } rst, err := ballots.Layer(s.GetState(0).DB, last) @@ -2515,7 +2469,6 @@ func TestOnBallotComputeOpinion(t *testing.T) { func TestOnHareOutput(t *testing.T) { const size = 4 - ctx := context.Background() cfg := defaultTestConfig() cfg.Zdist = 3 cfg.Hdist = cfg.Zdist + 3 @@ -2556,15 +2509,15 @@ func TestOnHareOutput(t *testing.T) { tortoise := tortoiseFromSimState(t, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t)), ) - tortoise.TallyVotes(ctx, s.Next(tc.failedOptions...)) + tortoise.TallyVotes(s.Next(tc.failedOptions...)) for i := 0; i < tc.genDistance; i++ { - tortoise.TallyVotes(ctx, s.Next()) + tortoise.TallyVotes(s.Next()) } require.Equal(t, types.GetEffectiveGenesis(), tortoise.LatestComplete()) empty := s.Layer(0) tortoise.OnHareOutput(empty.Index(), empty.Blocks()[0].ID()) last := s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.Equal(t, last.Sub(1), tortoise.LatestComplete()) }) } @@ -2573,7 +2526,6 @@ func TestOnHareOutput(t *testing.T) { func TestDecodeExceptions(t *testing.T) { const size = 1 - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size @@ -2588,7 +2540,7 @@ func TestDecodeExceptions(t *testing.T) { s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t)), ) last := s.Next(sim.WithNumBlocks(2)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) layer := tortoise.trtl.layer(last) require.Equal(t, against, layer.blocks[0].hare) @@ -2597,7 +2549,7 @@ func TestDecodeExceptions(t *testing.T) { last = s.Next( sim.WithNumBlocks(1), ) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) ballots1 := tortoise.trtl.ballots[last] last = s.Next( @@ -2608,7 +2560,7 @@ func TestDecodeExceptions(t *testing.T) { Height: block.height, })), ) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) ballots2 := tortoise.trtl.ballots[last] last = s.Next( @@ -2619,7 +2571,7 @@ func TestDecodeExceptions(t *testing.T) { Height: block.height, })), ) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) ballots3 := tortoise.trtl.ballots[last] for _, ballot := range ballots1 { @@ -2664,7 +2616,6 @@ func findVote(v votes, lid types.LayerID, bid types.BlockID) sign { func TestCountOnBallot(t *testing.T) { const size = 10 - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size @@ -2680,7 +2631,7 @@ func TestCountOnBallot(t *testing.T) { ) s.Next(sim.WithNumBlocks(1), sim.WithEmptyHareOutput()) last := s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) require.Equal(t, types.GetEffectiveGenesis(), tortoise.LatestComplete(), "does't cross threshold as generated ballots vote inconsistently with hare", ) @@ -2702,7 +2653,7 @@ func TestCountOnBallot(t *testing.T) { ballot.Votes.Support = nil tortoise.OnBallot(ballot.ToTortoiseData()) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } func TestOnBallotBeforeTallyVotes(t *testing.T) { @@ -2710,7 +2661,6 @@ func TestOnBallotBeforeTallyVotes(t *testing.T) { size = 4 testDistance = 4 ) - ctx := context.Background() cfg := defaultTestConfig() cfg.Hdist = testDistance + 1 cfg.Zdist = cfg.Hdist @@ -2733,14 +2683,13 @@ func TestOnBallotBeforeTallyVotes(t *testing.T) { for _, ballot := range blts { tortoise.OnBallot(ballot.ToTortoiseData()) } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) } func TestNonTerminatedLayers(t *testing.T) { const size = 10 - ctx := context.Background() cfg := defaultTestConfig() cfg.Hdist = 10 cfg.Zdist = 3 @@ -2757,20 +2706,19 @@ func TestNonTerminatedLayers(t *testing.T) { s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(t)), ) for i := 0; i < int(cfg.Zdist); i++ { - tortoise.TallyVotes(ctx, s.Next( + tortoise.TallyVotes(s.Next( sim.WithNumBlocks(0), sim.WithoutHareOutput())) } require.Equal(t, types.GetEffectiveGenesis(), tortoise.LatestComplete()) var last types.LayerID for i := 0; i <= int(cfg.Zdist); i++ { last = s.Next(sim.WithNumBlocks(1)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) } require.Equal(t, last.Sub(1), tortoise.LatestComplete()) } func TestEncodeVotes(t *testing.T) { - ctx := context.Background() t.Run("support", func(t *testing.T) { tortoise := defaultAlgorithm(t) @@ -2781,8 +2729,8 @@ func TestEncodeVotes(t *testing.T) { tortoise.OnBlock(block.ToVote()) tortoise.OnHareOutput(block.LayerIndex, block.ID()) - tortoise.TallyVotes(ctx, block.LayerIndex.Add(1)) - opinion, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(block.LayerIndex.Add(1))) + tortoise.TallyVotes(block.LayerIndex.Add(1)) + opinion, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(block.LayerIndex.Add(1))) require.NoError(t, err) require.Len(t, opinion.Support, 1) @@ -2798,8 +2746,8 @@ func TestEncodeVotes(t *testing.T) { tortoise.OnHareOutput(types.GetEffectiveGenesis().Add(1), types.EmptyBlockID) current := types.GetEffectiveGenesis().Add(2) - tortoise.TallyVotes(ctx, current) - opinion, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(current)) + tortoise.TallyVotes(current) + opinion, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(current)) require.NoError(t, err) require.Empty(t, opinion.Support) @@ -2813,8 +2761,8 @@ func TestEncodeVotes(t *testing.T) { tortoise := defaultAlgorithm(t) current := types.GetEffectiveGenesis().Add(2) - tortoise.TallyVotes(ctx, current) - opinion, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(current)) + tortoise.TallyVotes(current) + opinion, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(current)) require.NoError(t, err) require.Empty(t, opinion.Support) @@ -2849,9 +2797,9 @@ func TestEncodeVotes(t *testing.T) { current := lid.Add(2) tortoise.OnWeakCoin(current.Sub(1), true) - tortoise.TallyVotes(ctx, current) + tortoise.TallyVotes(current) - opinion, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(current)) + opinion, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(current)) require.NoError(t, err) require.Len(t, opinion.Support, 2) @@ -2920,9 +2868,9 @@ func TestEncodeVotes(t *testing.T) { require.NoError(t, tortoise.StoreBallot(decoded)) current := lid.Add(1) - tortoise.TallyVotes(ctx, current) + tortoise.TallyVotes(current) - opinion, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(current)) + opinion, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(current)) require.NoError(t, err) require.Len(t, opinion.Abstain, 1) require.Empty(t, opinion.Support) @@ -2930,7 +2878,7 @@ func TestEncodeVotes(t *testing.T) { tortoise.OnHareOutput(hare, types.EmptyBlockID) - rewritten, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(current)) + rewritten, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(current)) require.NoError(t, err) require.Len(t, rewritten.Abstain, 1) require.Empty(t, rewritten.Support) @@ -2953,7 +2901,6 @@ func TestEncodeVotes(t *testing.T) { func TestBaseBallotBeforeCurrentLayer(t *testing.T) { t.Run("encode", func(t *testing.T) { - ctx := context.Background() cfg := defaultTestConfig() s := sim.New(sim.WithLayerSize(cfg.LayerSize)) s.Setup() @@ -2966,15 +2913,14 @@ func TestBaseBallotBeforeCurrentLayer(t *testing.T) { for i := 0; i < 4; i++ { last = s.Next() } - tortoise.TallyVotes(ctx, last) - encoded, err := tortoise.EncodeVotes(ctx, EncodeVotesWithCurrent(last)) + tortoise.TallyVotes(last) + encoded, err := tortoise.EncodeVotes(context.Background(), EncodeVotesWithCurrent(last)) require.NoError(t, err) ballot, err := ballots.Get(s.GetState(0).DB, encoded.Base) require.NoError(t, err) require.NotEqual(t, last, ballot.Layer) }) t.Run("decode", func(t *testing.T) { - ctx := context.Background() cfg := defaultTestConfig() s := sim.New(sim.WithLayerSize(cfg.LayerSize)) s.Setup() @@ -2987,7 +2933,7 @@ func TestBaseBallotBeforeCurrentLayer(t *testing.T) { for i := 0; i < 4; i++ { last = s.Next() } - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) ballots, err := ballots.Layer(s.GetState(0).DB, last) require.NoError(t, err) ballot := types.NewExistingBallot( @@ -3039,17 +2985,16 @@ func BenchmarkOnBallot(b *testing.B) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = layerSize cfg.WindowSize = window tortoise := tortoiseFromSimState(b, s.GetState(0), WithConfig(cfg), WithLogger(zaptest.NewLogger(b))) for i := 0; i < window; i++ { - tortoise.TallyVotes(ctx, s.Next()) + tortoise.TallyVotes(s.Next()) } last := s.Next() - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) ballots, err := ballots.Layer(s.GetState(0).DB, last) require.NoError(b, err) hare, err := certificates.GetHareOutput(s.GetState(0).DB, last.Sub(window/2)) @@ -3095,7 +3040,6 @@ func BenchmarkOnBallot(b *testing.B) { } func TestMultipleTargets(t *testing.T) { - ctx := context.Background() cfg := defaultTestConfig() const size = 4 cfg.LayerSize = size @@ -3110,7 +3054,7 @@ func TestMultipleTargets(t *testing.T) { ) heights := []uint64{1, 2} id := types.BlockID{'t'} - multi := func(rng *rand.Rand, layers []*types.Layer, i int) sim.Voting { + multi := func(_ *rand.Rand, layers []*types.Layer, i int) sim.Voting { prev := layers[len(layers)-1] require.NotEmpty(t, prev.BallotIDs()) return sim.Voting{ @@ -3134,7 +3078,7 @@ func TestMultipleTargets(t *testing.T) { s.Next(sim.WithNumBlocks(0)) s.Next(sim.WithNumBlocks(0), sim.WithVoteGenerator(multi)) last := s.Next(sim.WithNumBlocks(0), sim.WithVoteGenerator(upvote)) - tortoise.TallyVotes(ctx, last) + tortoise.TallyVotes(last) rst := tortoise.Updates() require.Len(t, rst, 4) @@ -3142,12 +3086,12 @@ func TestMultipleTargets(t *testing.T) { require.Equal(t, block.Header.Height, heights[0]) require.True(t, block.Valid) require.False(t, block.Data) - votes, err := tortoise.EncodeVotes(ctx) + votes, err := tortoise.EncodeVotes(context.Background()) require.NoError(t, err) require.Len(t, votes.Against, 1) require.Equal(t, votes.Against[0], block.Header) tortoise.OnBlock(block.Header) - votes, err = tortoise.EncodeVotes(ctx) + votes, err = tortoise.EncodeVotes(context.Background()) require.NoError(t, err) require.Empty(t, votes.Against) } @@ -3165,7 +3109,7 @@ func TestUpdates(t *testing.T) { LayerID: lid, }) trt.OnHareOutput(lid, id) - trt.TallyVotes(context.TODO(), lid) + trt.TallyVotes(lid) updates := trt.Updates() require.Len(t, updates, 2) require.Len(t, updates[1].Blocks, 1) @@ -3179,7 +3123,7 @@ func TestUpdates(t *testing.T) { id := types.BlockID{1} lid := genesis + 1 - trt.TallyVotes(context.TODO(), lid) + trt.TallyVotes(lid) updates := trt.Updates() require.Len(t, updates, 2) require.Empty(t, updates[0].Blocks) diff --git a/tortoise/tracer.go b/tortoise/tracer.go index a55bd702f7..d8d23af888 100644 --- a/tortoise/tracer.go +++ b/tortoise/tracer.go @@ -348,7 +348,7 @@ func (t *TallyTrace) New() traceEvent { } func (t *TallyTrace) Run(r *traceRunner) error { - r.trt.TallyVotes(context.Background(), t.Layer) + r.trt.TallyVotes(t.Layer) return nil } diff --git a/tortoise/tracer_test.go b/tortoise/tracer_test.go index 21e217ee5a..46f5fa66cb 100644 --- a/tortoise/tracer_test.go +++ b/tortoise/tracer_test.go @@ -26,7 +26,6 @@ func TestTracer(t *testing.T) { ) s.Setup() - ctx := context.Background() cfg := defaultTestConfig() cfg.LayerSize = size cfg.WindowSize = 10 @@ -35,7 +34,7 @@ func TestTracer(t *testing.T) { s.Next() } last := s.Next() - trt.TallyVotes(ctx, last) + trt.TallyVotes(last) trt.Updates() // just trace final result t.Run("live", func(t *testing.T) { t.Parallel() diff --git a/txs/cache.go b/txs/cache.go index c988e96668..e23b92a9ff 100644 --- a/txs/cache.go +++ b/txs/cache.go @@ -94,7 +94,7 @@ func (ac *accountCache) availBalance() uint64 { return ac.txsByNonce.Back().Value.(*candidate).postBalance } -func (ac *accountCache) precheck(logger *zap.Logger, ntx *NanoTX) (*list.Element, *candidate, error) { +func (ac *accountCache) precheck(ntx *NanoTX) (*list.Element, *candidate, error) { if ac.txsByNonce.Len() >= maxTXsPerAcct { ac.moreInDB = true return nil, nil, fmt.Errorf("%w: len %d", errTooManyNonce, ac.txsByNonce.Len()) @@ -127,7 +127,7 @@ func (ac *accountCache) accept(logger *zap.Logger, ntx *NanoTX, blockSeed []byte replaced *NanoTX err error ) - prev, cand, err = ac.precheck(logger, ntx) + prev, cand, err = ac.precheck(ntx) if err != nil { return err } @@ -262,7 +262,7 @@ func findBest(ntxs []*NanoTX, balance uint64, blockSeed []byte) *NanoTX { return best } -// adding a tx to the account cache. possible outcomes: +// Adding a tx to the account cache. Possible outcomes: // - nonce is smaller than the next nonce in state: reject from cache // - too many txs present: reject from cache // - nonce already exists in the cache: @@ -337,8 +337,8 @@ func (ac *accountCache) addPendingFromNonce( return ac.addBatch(logger, byPrincipal[ac.addr], nil) } -// find the first nonce without a layer. -// a nonce with a valid layer indicates that it's already packed in a proposal/block. +// Find the first nonce without a layer. +// A nonce with a valid layer indicates that it's already packed in a proposal/block. func (ac *accountCache) getMempool(logger *zap.Logger) []*NanoTX { bests := make([]*NanoTX, 0, maxTXsPerAcct) offset := 0 diff --git a/txs/conservative_state.go b/txs/conservative_state.go index c252e540f5..edfa66afa8 100644 --- a/txs/conservative_state.go +++ b/txs/conservative_state.go @@ -234,8 +234,8 @@ func (cs *ConservativeState) GetTransactionsByAddress( } // ShuffleWithNonceOrder perform a Fisher-Yates shuffle on the transactions. -// note that after shuffling, the original list of transactions are no longer in nonce order -// within the same principal. we simply check which principal occupies the spot after +// Note that after shuffling, the original list of transactions are no longer in nonce order +// within the same principal. We simply check which principal occupies the spot after // the shuffle and retrieve their transactions in nonce order. func ShuffleWithNonceOrder( logger *zap.Logger, diff --git a/txs/mempool_iterator.go b/txs/mempool_iterator.go index 822a3cbcb2..4c98bf7b1f 100644 --- a/txs/mempool_iterator.go +++ b/txs/mempool_iterator.go @@ -71,7 +71,7 @@ func (pq *priorityQueue) update(it *item, ntx *NanoTX) { } // mempoolIterator holds the best transaction from the conservative state mempool. -// not thread-safe. +// Not thread-safe. type mempoolIterator struct { logger *zap.Logger gasRemaining uint64 diff --git a/txs/metrics.go b/txs/metrics.go index 275886a98b..83f536176f 100644 --- a/txs/metrics.go +++ b/txs/metrics.go @@ -9,7 +9,7 @@ import ( const ( namespace = "txs" - // labels for tx acceptance state by the cache. + // Labels for tx acceptance state by the cache. duplicate = "dupe" saved = "saved" savedNoHdr = "savedNoHdr" @@ -20,7 +20,7 @@ const ( RawFromDB = "raw" updated = "updated" - // label for tx acceptance state by the mempool. + // Label for tx acceptance state by the mempool. mempool = "mempool" balanceTooSmall = "balance" tooManyNonce = "too_many" diff --git a/txs/nano_tx.go b/txs/nano_tx.go index 8386d0e5d6..55ecd96074 100644 --- a/txs/nano_tx.go +++ b/txs/nano_tx.go @@ -44,8 +44,8 @@ func (n *NanoTX) combinedHash(blockSeed []byte) []byte { } // Better returns true if this transaction takes priority than `other`. -// when the block seed is non-empty, this tx is being considered for a block. -// the block seed then is used to tie-break (deterministically) transactions for +// When the block seed is non-empty, this tx is being considered for a block. +// The block seed then is used to tie-break (deterministically) transactions for // the same account/nonce. func (n *NanoTX) Better(other *NanoTX, blockSeed []byte) bool { if n.Principal != other.Principal || From 60a3c67dbe8ce0e296c35662765a186dc0323c63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:52:29 +0000 Subject: [PATCH 21/73] build(deps): Bump github.com/spacemeshos/fixed from 0.1.1 to 0.1.2 (#6366) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 175655fe1a..b002b8d09d 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/slok/go-http-metrics v0.13.0 github.com/spacemeshos/api/release/go v1.54.0 github.com/spacemeshos/economics v0.1.3 - github.com/spacemeshos/fixed v0.1.1 + github.com/spacemeshos/fixed v0.1.2 github.com/spacemeshos/go-scale v1.2.0 github.com/spacemeshos/merkle-tree v0.2.3 github.com/spacemeshos/poet v0.10.4 diff --git a/go.sum b/go.sum index ee1d228f65..fd64ee92f7 100644 --- a/go.sum +++ b/go.sum @@ -607,8 +607,8 @@ github.com/spacemeshos/api/release/go v1.54.0 h1:P5bqTwrFUoHBodYvYKhJ5pYhHU5o7af github.com/spacemeshos/api/release/go v1.54.0/go.mod h1:nIWzRxJe365XvjN51AhfwR6Lf0EDaMcnmAb6hd2D0xw= github.com/spacemeshos/economics v0.1.3 h1:ACkq3mTebIky4Zwbs9SeSSRZrUCjU/Zk0wq9Z0BTh2A= github.com/spacemeshos/economics v0.1.3/go.mod h1:FH7u0FzTIm6Kpk+X5HOZDvpkgNYBKclmH86rVwYaDAo= -github.com/spacemeshos/fixed v0.1.1 h1:N1y4SUpq1EV+IdJrWJwUCt1oBFzeru/VKVcBsvPc2Fk= -github.com/spacemeshos/fixed v0.1.1/go.mod h1:B/moObha9wGnwljZP+w/dYAwzv097aL9VV8Oyv2cM/E= +github.com/spacemeshos/fixed v0.1.2 h1:pENQ8pXFAqin3f15ZLoOVVeSgcmcFJ0IFdFm4+9u4SM= +github.com/spacemeshos/fixed v0.1.2/go.mod h1:OekUZD7FA9Ji8H/WEf5VuGYxPB+mWfXjbUI7I3qcT48= github.com/spacemeshos/go-scale v1.2.0 h1:ZlA2L1ILym2gmyJUwUdLTiyP1ZIG0U4xE9nFVFLi83M= github.com/spacemeshos/go-scale v1.2.0/go.mod h1:HV6e3/X5h9u2aFpYKJxt7PY/fBuLBegEKWgeZJ+/5jE= github.com/spacemeshos/merkle-tree v0.2.3 h1:zGEgOR9nxAzJr0EWjD39QFngwFEOxfxMloEJZtAysas= From cbcb7daa0a0d0ad89d2c1e705a7f3db24ebe662f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20R=C3=B3=C5=BCa=C5=84ski?= Date: Thu, 3 Oct 2024 13:57:56 +0200 Subject: [PATCH 22/73] review feedback --- activation/activation.go | 24 ++++++++------------ activation/atx_service_db.go | 9 +++++++- activation/validation.go | 9 ++++---- activation/validation_test.go | 2 +- node/node.go | 6 +++++ sql/localsql/schema/migrations/0010_atxs.sql | 3 +-- sql/localsql/schema/schema.sql | 3 +-- 7 files changed, 32 insertions(+), 24 deletions(-) diff --git a/activation/activation.go b/activation/activation.go index 934b3624f6..5769f600ae 100644 --- a/activation/activation.go +++ b/activation/activation.go @@ -113,14 +113,16 @@ type Builder struct { stop context.CancelFunc } +type foundPosAtx struct { + id types.ATXID + forPublish types.EpochID +} + type positioningAtxFinder struct { finding sync.Mutex - found *struct { - id types.ATXID - forPublish types.EpochID - } - golden types.ATXID - logger *zap.Logger + found *foundPosAtx + golden types.ATXID + logger *zap.Logger } type BuilderOption func(*Builder) @@ -926,19 +928,13 @@ func (f *positioningAtxFinder) find( id, err := atxs.PositioningATX(ctx, publish-1) if err != nil { logger.Warn("failed to get positioning ATX - falling back to golden", zap.Error(err)) - f.found = &struct { - id types.ATXID - forPublish types.EpochID - }{f.golden, publish} + f.found = &foundPosAtx{f.golden, publish} return f.golden } logger.Debug("found candidate positioning atx", log.ZShortStringer("id", id)) - f.found = &struct { - id types.ATXID - forPublish types.EpochID - }{id, publish} + f.found = &foundPosAtx{id, publish} return id } diff --git a/activation/atx_service_db.go b/activation/atx_service_db.go index 94e40b17ba..e84713aa6e 100644 --- a/activation/atx_service_db.go +++ b/activation/atx_service_db.go @@ -27,6 +27,7 @@ type dbAtxService struct { type dbAtxServiceConfig struct { // delay before PoST in ATX is considered valid (counting from the time it was received) postValidityDelay time.Duration + trusted []types.NodeID } type dbAtxServiceOption func(*dbAtxServiceConfig) @@ -37,6 +38,12 @@ func WithPostValidityDelay(delay time.Duration) dbAtxServiceOption { } } +func WithTrustedIDs(ids ...types.NodeID) dbAtxServiceOption { + return func(cfg *dbAtxServiceConfig) { + cfg.trusted = ids + } +} + func NewDBAtxService( db sql.Executor, golden types.ATXID, @@ -91,7 +98,7 @@ func (s *dbAtxService) PositioningATX(ctx context.Context, maxPublish types.Epoc s.golden, s.validator, s.logger, VerifyChainOpts.AssumeValidBefore(time.Now().Add(-s.cfg.postValidityDelay)), - // VerifyChainOpts.WithTrustedID(nodeID), + VerifyChainOpts.WithTrustedIDs(s.cfg.trusted...), VerifyChainOpts.WithLogger(s.logger), ) if err != nil { diff --git a/activation/validation.go b/activation/validation.go index d6d070d895..b31a3ec786 100644 --- a/activation/validation.go +++ b/activation/validation.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "slices" "time" "github.com/spacemeshos/merkle-tree" @@ -360,7 +361,7 @@ func (v *Validator) PositioningAtx( type verifyChainOpts struct { assumedValidTime time.Time - trustedNodeID types.NodeID + trustedNodeID []types.NodeID logger *zap.Logger } @@ -377,8 +378,8 @@ func (verifyChainOptsNs) AssumeValidBefore(val time.Time) VerifyChainOption { } } -// WithTrustedID configures the validator to assume that ATXs created by the given node ID are valid. -func (verifyChainOptsNs) WithTrustedID(val types.NodeID) VerifyChainOption { +// WithTrustedIDs configures the validator to assume that ATXs created by the given node IDs are valid. +func (verifyChainOptsNs) WithTrustedIDs(val ...types.NodeID) VerifyChainOption { return func(o *verifyChainOpts) { o.trustedNodeID = val } @@ -533,7 +534,7 @@ func (v *Validator) verifyChainWithOpts( zap.Time("valid_before", opts.assumedValidTime), ) return nil - case atx.SmesherID == opts.trustedNodeID: + case slices.Contains(opts.trustedNodeID, atx.SmesherID): log.Debug("not verifying ATX chain", zap.Stringer("atx_id", id), zap.String("reason", "trusted")) return nil } diff --git a/activation/validation_test.go b/activation/validation_test.go index 09c5d7c5ed..169a227007 100644 --- a/activation/validation_test.go +++ b/activation/validation_test.go @@ -543,7 +543,7 @@ func TestVerifyChainDeps(t *testing.T) { ctrl := gomock.NewController(t) v := NewMockPostVerifier(ctrl) validator := NewValidator(db, nil, DefaultPostConfig(), config.ScryptParams{}, v) - err = validator.VerifyChain(ctx, vAtx.ID(), goldenATXID, VerifyChainOpts.WithTrustedID(signer.NodeID())) + err = validator.VerifyChain(ctx, vAtx.ID(), goldenATXID, VerifyChainOpts.WithTrustedIDs(signer.NodeID())) require.NoError(t, err) }) diff --git a/node/node.go b/node/node.go index 2c43cad4e9..3543cafc95 100644 --- a/node/node.go +++ b/node/node.go @@ -1071,6 +1071,11 @@ func (app *App) initServices(ctx context.Context) error { } atxBuilderLog := app.addLogger(ATXBuilderLogger, lg).Zap() + trustedIDs := make([]types.NodeID, 0, len(app.signers)) + for _, sig := range app.signers { + trustedIDs = append(trustedIDs, sig.NodeID()) + } + atxService := activation.NewDBAtxService( app.db, goldenATXID, @@ -1078,6 +1083,7 @@ func (app *App) initServices(ctx context.Context) error { app.validator, atxBuilderLog, activation.WithPostValidityDelay(app.Config.PostValidDelay), + activation.WithTrustedIDs(trustedIDs...), ) atxBuilder := activation.NewBuilder( builderConfig, diff --git a/sql/localsql/schema/migrations/0010_atxs.sql b/sql/localsql/schema/migrations/0010_atxs.sql index 19e9798333..97ead34ce4 100644 --- a/sql/localsql/schema/migrations/0010_atxs.sql +++ b/sql/localsql/schema/migrations/0010_atxs.sql @@ -1,12 +1,11 @@ --- Table for storing blobs of published ATX for regossiping purposes. CREATE TABLE atx_blobs ( - id CHAR(32), + id CHAR(32) PRIMARY KEY, pubkey CHAR(32) NOT NULL, epoch INT NOT NULL, atx BLOB, version INTEGER ); -CREATE UNIQUE INDEX atx_blobs_id ON atx_blobs (id); CREATE UNIQUE INDEX atx_blobs_epoch_pubkey ON atx_blobs (epoch, pubkey); diff --git a/sql/localsql/schema/schema.sql b/sql/localsql/schema/schema.sql index 2c9f4dd1c6..5b9cb31601 100755 --- a/sql/localsql/schema/schema.sql +++ b/sql/localsql/schema/schema.sql @@ -1,14 +1,13 @@ PRAGMA user_version = 10; CREATE TABLE atx_blobs ( - id CHAR(32), + id CHAR(32) PRIMARY KEY, pubkey CHAR(32) NOT NULL, epoch INT NOT NULL, atx BLOB, version INTEGER ); CREATE UNIQUE INDEX atx_blobs_epoch_pubkey ON atx_blobs (epoch, pubkey); -CREATE UNIQUE INDEX atx_blobs_id ON atx_blobs (id); CREATE TABLE atx_sync_requests ( epoch INT NOT NULL, From c50411de41f23500b78a692170f6363165d3480d Mon Sep 17 00:00:00 2001 From: Piotr Skamruk Date: Thu, 3 Oct 2024 12:51:10 +0000 Subject: [PATCH 23/73] Add Piotr to CODEOWNERS (#6369) ## Motivation Add a possibility to do proper review in this repo. --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ea63a46113..06b1c3c3f3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,4 @@ # Default owners for the repository. # Unless further specified all of those will be requested for review whenever someone opens a PR. # These are also the only users who are allowed to `bors try` and `bors merge`. -* @dshulyak @fasmat @poszu @ivan4th @acud +* @dshulyak @fasmat @poszu @ivan4th @acud @jellonek From dc63e290d35ba462e2ba00517dbbe4e9f4f57b9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:15:12 +0000 Subject: [PATCH 24/73] build(deps): Bump github.com/spacemeshos/post from 0.12.8 to 0.12.9 (#6368) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b002b8d09d..f335ec5d16 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/spacemeshos/go-scale v1.2.0 github.com/spacemeshos/merkle-tree v0.2.3 github.com/spacemeshos/poet v0.10.4 - github.com/spacemeshos/post v0.12.8 + github.com/spacemeshos/post v0.12.9 github.com/spf13/afero v1.11.0 github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index fd64ee92f7..d41c897669 100644 --- a/go.sum +++ b/go.sum @@ -615,8 +615,8 @@ github.com/spacemeshos/merkle-tree v0.2.3 h1:zGEgOR9nxAzJr0EWjD39QFngwFEOxfxMloE github.com/spacemeshos/merkle-tree v0.2.3/go.mod h1:VomOcQ5pCBXz7goiWMP5hReyqOfDXGSKbrH2GB9Htww= github.com/spacemeshos/poet v0.10.4 h1:MHGG1dhMVwy5DdlsmwdRLDQTTqlPA21lSQB2PVd8MSk= github.com/spacemeshos/poet v0.10.4/go.mod h1:hz21GMyHb9h29CqNhVeKxCD5dxZdQK27nAqLpT46gjE= -github.com/spacemeshos/post v0.12.8 h1:xcxVPWTvt2zJYJUvdpmX7CwR1CQnMnmd4VndThGbSdY= -github.com/spacemeshos/post v0.12.8/go.mod h1:WzfVgaa1wxgrsytC4EVKkG8rwoUxjyoyQL0ZSxs56Y0= +github.com/spacemeshos/post v0.12.9 h1:P1jTClND3LktNMmfJFtqPN85xKY0vTESb69Z55oPjt0= +github.com/spacemeshos/post v0.12.9/go.mod h1:1RJq+6Batnv2xfH84fKJmXtOJfT+/FcL/Iwoprqep2M= github.com/spacemeshos/sha256-simd v0.1.0 h1:G7Mfu5RYdQiuE+wu4ZyJ7I0TI74uqLhFnKblEnSpjYI= github.com/spacemeshos/sha256-simd v0.1.0/go.mod h1:O8CClVIilId7RtuCMV2+YzMj6qjVn75JsxOxaE8vcfM= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= From 17c451b2e75351d79dd683a61951c20e0f55a2b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:11:17 +0000 Subject: [PATCH 25/73] build(deps): Bump github.com/spacemeshos/merkle-tree from 0.2.3 to 0.2.4 (#6365) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f335ec5d16..51277f545f 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/spacemeshos/economics v0.1.3 github.com/spacemeshos/fixed v0.1.2 github.com/spacemeshos/go-scale v1.2.0 - github.com/spacemeshos/merkle-tree v0.2.3 + github.com/spacemeshos/merkle-tree v0.2.4 github.com/spacemeshos/poet v0.10.4 github.com/spacemeshos/post v0.12.9 github.com/spf13/afero v1.11.0 diff --git a/go.sum b/go.sum index d41c897669..6fa1c17770 100644 --- a/go.sum +++ b/go.sum @@ -611,8 +611,8 @@ github.com/spacemeshos/fixed v0.1.2 h1:pENQ8pXFAqin3f15ZLoOVVeSgcmcFJ0IFdFm4+9u4 github.com/spacemeshos/fixed v0.1.2/go.mod h1:OekUZD7FA9Ji8H/WEf5VuGYxPB+mWfXjbUI7I3qcT48= github.com/spacemeshos/go-scale v1.2.0 h1:ZlA2L1ILym2gmyJUwUdLTiyP1ZIG0U4xE9nFVFLi83M= github.com/spacemeshos/go-scale v1.2.0/go.mod h1:HV6e3/X5h9u2aFpYKJxt7PY/fBuLBegEKWgeZJ+/5jE= -github.com/spacemeshos/merkle-tree v0.2.3 h1:zGEgOR9nxAzJr0EWjD39QFngwFEOxfxMloEJZtAysas= -github.com/spacemeshos/merkle-tree v0.2.3/go.mod h1:VomOcQ5pCBXz7goiWMP5hReyqOfDXGSKbrH2GB9Htww= +github.com/spacemeshos/merkle-tree v0.2.4 h1:kA7uRGadeyULOFlBxsWRwN0v1U2B4PD4OluR1l3d4nE= +github.com/spacemeshos/merkle-tree v0.2.4/go.mod h1:yTJd262m3pjnw8mH0j5vt3w0J+2mpM6g0xyc5Pr2zIw= github.com/spacemeshos/poet v0.10.4 h1:MHGG1dhMVwy5DdlsmwdRLDQTTqlPA21lSQB2PVd8MSk= github.com/spacemeshos/poet v0.10.4/go.mod h1:hz21GMyHb9h29CqNhVeKxCD5dxZdQK27nAqLpT46gjE= github.com/spacemeshos/post v0.12.9 h1:P1jTClND3LktNMmfJFtqPN85xKY0vTESb69Z55oPjt0= From 65c5ec92f67598bfe2bfea1339170693f65f2f30 Mon Sep 17 00:00:00 2001 From: acud <12988138+acud@users.noreply.github.com> Date: Thu, 3 Oct 2024 19:17:29 +0000 Subject: [PATCH 26/73] chore: backport missing changes from #6353 (#6367) ## Motivation Backports a forgotten change to hare4 from hare3. --- hare4/malfeasance.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hare4/malfeasance.go b/hare4/malfeasance.go index 8e2feb9f38..3b06387eab 100644 --- a/hare4/malfeasance.go +++ b/hare4/malfeasance.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strconv" "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" @@ -52,6 +53,20 @@ func NewMalfeasanceHandler( return mh } +func (mh *MalfeasanceHandler) Info(data wire.ProofData) (map[string]string, error) { + hp, ok := data.(*wire.HareProof) + if !ok { + return nil, errors.New("wrong message type for hare equivocation") + } + return map[string]string{ + "msg1": hp.Messages[0].InnerMsg.MsgHash.String(), + "msg2": hp.Messages[1].InnerMsg.MsgHash.String(), + "layer": hp.Messages[0].InnerMsg.Layer.String(), + "round": strconv.FormatUint(uint64(hp.Messages[0].InnerMsg.Round), 10), + "smesher_id": hp.Messages[0].SmesherID.String(), + }, nil +} + func (mh *MalfeasanceHandler) Validate(ctx context.Context, data wire.ProofData) (types.NodeID, error) { hp, ok := data.(*wire.HareProof) if !ok { From 2b40a34a14dd8b5027641eca28be5a1bc0d7a99a Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Thu, 3 Oct 2024 21:16:25 +0000 Subject: [PATCH 27/73] v2alpha1: Fix issue with account service template address (#6370) When the account's template address was empty, it tried to call a function on it, which caused the statement to be active indefinitely. --- api/grpcserver/v2alpha1/account.go | 11 +++++++---- api/grpcserver/v2alpha1/account_test.go | 21 +++++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/api/grpcserver/v2alpha1/account.go b/api/grpcserver/v2alpha1/account.go index 347606630e..68aab55698 100644 --- a/api/grpcserver/v2alpha1/account.go +++ b/api/grpcserver/v2alpha1/account.go @@ -67,9 +67,8 @@ func (s *AccountService) List( rst := make([]*spacemeshv2alpha1.Account, 0, request.Limit) if err := accounts.IterateAccountsOps(s.db, ops, func(account *types.Account) bool { counterProjected, balanceProjected := s.conState.GetProjection(account.Address) - rst = append(rst, &spacemeshv2alpha1.Account{ - Address: account.Address.String(), - Template: account.TemplateAddress.String(), + item := &spacemeshv2alpha1.Account{ + Address: account.Address.String(), Current: &spacemeshv2alpha1.AccountState{ Counter: account.NextNonce, Balance: account.Balance, @@ -79,7 +78,11 @@ func (s *AccountService) List( Counter: counterProjected, Balance: balanceProjected, }, - }) + } + if account.TemplateAddress != nil { + item.Template = account.TemplateAddress.String() + } + rst = append(rst, item) return true }); err != nil { return nil, status.Error(codes.Internal, err.Error()) diff --git a/api/grpcserver/v2alpha1/account_test.go b/api/grpcserver/v2alpha1/account_test.go index e3a1eb2d97..20c8929f46 100644 --- a/api/grpcserver/v2alpha1/account_test.go +++ b/api/grpcserver/v2alpha1/account_test.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc/status" "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/genvm/core" "github.com/spacemeshos/go-spacemesh/genvm/templates/multisig" "github.com/spacemeshos/go-spacemesh/genvm/templates/wallet" "github.com/spacemeshos/go-spacemesh/sql/accounts" @@ -22,7 +23,7 @@ import ( type testAccount struct { Address types.Address - TemplateAddress types.Address + TemplateAddress *types.Address BalanceCurrent uint64 BalanceProjected uint64 CounterCurrent uint64 @@ -40,9 +41,12 @@ func TestAccountService_List(t *testing.T) { addr := types.Address{} binary.BigEndian.PutUint64(addr[:], uint64(i)) - template := wallet.TemplateAddress + var template *core.Address if (i % 2) == 0 { - template = multisig.TemplateAddress + template = &wallet.TemplateAddress + } + if (i % 3) == 0 { + template = &multisig.TemplateAddress } accs[i] = testAccount{ @@ -57,7 +61,7 @@ func TestAccountService_List(t *testing.T) { require.NoError(t, accounts.Update(db, &types.Account{ Layer: 1, Address: addr, - TemplateAddress: &template, + TemplateAddress: template, NextNonce: accs[i].CounterCurrent, Balance: accs[i].BalanceCurrent, })) @@ -154,4 +158,13 @@ func TestAccountService_List(t *testing.T) { require.Len(t, list.Accounts, 1) require.Equal(t, accs[0].TemplateAddress.String(), list.Accounts[0].Template) }) + t.Run("nil template address", func(t *testing.T) { + list, err := client.List(ctx, &spacemeshv2alpha1.AccountRequest{ + Addresses: []string{accs[1].Address.String()}, + Limit: 10, + }) + require.NoError(t, err) + require.Len(t, list.Accounts, 1) + require.Equal(t, "", list.Accounts[0].Template) + }) } From 9d22ce551da3aefeed3f57e86e6a7f8c9edfb9bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 06:43:24 +0000 Subject: [PATCH 28/73] build(deps): Bump cloud.google.com/go/storage from 1.43.0 to 1.44.0 (#6372) --- go.mod | 48 ++++++++++++++++--------- go.sum | 108 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 101 insertions(+), 55 deletions(-) diff --git a/go.mod b/go.mod index 51277f545f..242a9d46e7 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/spacemeshos/go-spacemesh go 1.23.2 require ( - cloud.google.com/go/storage v1.43.0 + cloud.google.com/go/storage v1.44.0 github.com/ALTree/bigfloat v0.2.0 github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2 github.com/cosmos/btcutil v1.0.5 @@ -68,11 +68,16 @@ require ( ) require ( - cloud.google.com/go v0.115.0 // indirect - cloud.google.com/go/auth v0.6.1 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect - cloud.google.com/go/compute/metadata v0.5.0 // indirect - cloud.google.com/go/iam v1.1.8 // indirect + cel.dev/expr v0.16.1 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute/metadata v0.5.1 // indirect + cloud.google.com/go/iam v1.2.1 // indirect + cloud.google.com/go/monitoring v1.21.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect github.com/anacrolix/chansync v0.3.0 // indirect github.com/anacrolix/missinggo v1.2.1 // indirect @@ -81,7 +86,9 @@ require ( github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/c0mm4nd/go-ripemd v0.0.0-20200326052756-bd1759ad7d10 // indirect + github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -90,6 +97,8 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/elastic/gosigar v0.14.3 // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect + github.com/envoyproxy/go-control-plane v0.13.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -112,9 +121,9 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.5 // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect @@ -195,6 +204,7 @@ require ( github.com/pion/turn/v2 v2.1.6 // indirect github.com/pion/webrtc/v3 v3.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polydawn/refmt v0.89.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect @@ -213,11 +223,14 @@ require ( github.com/wlynxg/anet v0.0.4 // indirect github.com/x448/float16 v0.8.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.22.2 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -231,9 +244,10 @@ require ( golang.org/x/tools v0.25.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/api v0.187.0 // indirect - google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect + google.golang.org/api v0.197.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect diff --git a/go.sum b/go.sum index 6fa1c17770..aeeead3ac4 100644 --- a/go.sum +++ b/go.sum @@ -1,21 +1,29 @@ +cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= +cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= -cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= -cloud.google.com/go/auth v0.6.1 h1:T0Zw1XM5c1GlpN2HYr2s+m3vr1p2wy+8VN+Z1FKxW38= -cloud.google.com/go/auth v0.6.1/go.mod h1:eFHG7zDzbXHKmjJddFG/rBlcGp6t25SwRUiEQSlO4x4= -cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= -cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= -cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= -cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= -cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= -cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= -cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= -cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= -cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= +cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= +cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs= +cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU= +cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g= +cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs= +cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= +cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc= +cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0= +cloud.google.com/go/monitoring v1.21.0 h1:EMc0tB+d3lUewT2NzKC/hr8cSR9WsUieVywzIHetGro= +cloud.google.com/go/monitoring v1.21.0/go.mod h1:tuJ+KNDdJbetSsbSGTqnaBvbauS5kr3Q/koy3Up6r+4= +cloud.google.com/go/storage v1.44.0 h1:abBzXf4UJKMmQ04xxJf9dYM/fNl24KHoTuBjyJDX2AI= +cloud.google.com/go/storage v1.44.0/go.mod h1:wpPblkIuMP5jCB/E48Pz9zIo2S/zD8g+ITmxKkPCITE= +cloud.google.com/go/trace v1.11.0 h1:UHX6cOJm45Zw/KIbqHe4kII8PupLt/V5tscZUkeiJVI= +cloud.google.com/go/trace v1.11.0/go.mod h1:Aiemdi52635dBR7o3zuc9lLjXo3BwGaChEjCa3tJNmM= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= @@ -24,6 +32,14 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy github.com/ALTree/bigfloat v0.2.0 h1:AwNzawrpFuw55/YDVlcPw0F0cmmXrmngBHhVrvdXPvM= github.com/ALTree/bigfloat v0.2.0/go.mod h1:+NaH2gLeY6RPBPPQf4aRotPPStg+eXc8f9ZaE4vRfD4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= @@ -58,6 +74,8 @@ github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6r github.com/c0mm4nd/go-ripemd v0.0.0-20200326052756-bd1759ad7d10 h1:wJ2csnFApV9G1jgh5KmYdxVOQMi+fihIggVTjcbM7ts= github.com/c0mm4nd/go-ripemd v0.0.0-20200326052756-bd1759ad7d10/go.mod h1:mYPR+a1fzjnHY3VFH5KL3PkEjMlVfGXP7c8rbWlkLJg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2 h1:0oF8rdbeIhRy8Iu453oIgkvhPj8bNXldI3QnznkNg4o= @@ -65,6 +83,8 @@ github.com/chaos-mesh/chaos-mesh/api v0.0.0-20240930092556-24ddcc087ee2/go.mod h github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= @@ -102,7 +122,11 @@ github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 h1:S92OBrGuLLZsyM5ybUzgc/mPjIYk2AZqufieooe98uw= github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05/go.mod h1:M9R1FoZ3y//hwwnJtO51ypFGwm8ZfpxPT/ZLtO1mcgQ= github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= @@ -216,19 +240,19 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= 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= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= -github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= @@ -520,6 +544,8 @@ github.com/pion/webrtc/v3 v3.3.0/go.mod h1:hVmrDJvwhEertRWObeb1xzulzHGeVUoPlWvxd github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -683,18 +709,22 @@ github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= +go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= @@ -891,8 +921,8 @@ gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.187.0 h1:Mxs7VATVC2v7CY+7Xwm4ndkX71hpElcvx0D1Ji/p1eo= -google.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk= +google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ= +google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -905,10 +935,10 @@ google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d h1:PksQg4dV6Sem3/HkBX+Ltq8T0ke0PKIRBNBatoDTVls= -google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:s7iA721uChleev562UJO2OYB0PPT9CMFjV+Ce7VJH5M= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= -google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f h1:cUMEy+8oS78BWIH9OWazBkzbr090Od9tWBNtZHkOhf0= google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -922,6 +952,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From abcdb6dec1a63123c81f132ade04f15a90906456 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 07:37:39 +0000 Subject: [PATCH 29/73] build(deps): Bump github.com/spacemeshos/economics from 0.1.3 to 0.1.4 (#6364) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 242a9d46e7..cce905dab5 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/seehuhn/mt19937 v1.0.0 github.com/slok/go-http-metrics v0.13.0 github.com/spacemeshos/api/release/go v1.54.0 - github.com/spacemeshos/economics v0.1.3 + github.com/spacemeshos/economics v0.1.4 github.com/spacemeshos/fixed v0.1.2 github.com/spacemeshos/go-scale v1.2.0 github.com/spacemeshos/merkle-tree v0.2.4 @@ -99,7 +99,7 @@ require ( github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/envoyproxy/go-control-plane v0.13.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect - github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 // indirect + github.com/ericlagergren/decimal v0.0.0-20240411145413-00de7ca16731 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flynn/noise v1.1.0 // indirect diff --git a/go.sum b/go.sum index aeeead3ac4..473e88b7d2 100644 --- a/go.sum +++ b/go.sum @@ -127,8 +127,8 @@ github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnv github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 h1:S92OBrGuLLZsyM5ybUzgc/mPjIYk2AZqufieooe98uw= -github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05/go.mod h1:M9R1FoZ3y//hwwnJtO51ypFGwm8ZfpxPT/ZLtO1mcgQ= +github.com/ericlagergren/decimal v0.0.0-20240411145413-00de7ca16731 h1:R/ZjJpjQKsZ6L/+Gf9WHbt31GG8NMVcpRqUE+1mMIyo= +github.com/ericlagergren/decimal v0.0.0-20240411145413-00de7ca16731/go.mod h1:M9R1FoZ3y//hwwnJtO51ypFGwm8ZfpxPT/ZLtO1mcgQ= github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= @@ -631,8 +631,8 @@ github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIK github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spacemeshos/api/release/go v1.54.0 h1:P5bqTwrFUoHBodYvYKhJ5pYhHU5o7afdVo1a4IYlRng= github.com/spacemeshos/api/release/go v1.54.0/go.mod h1:nIWzRxJe365XvjN51AhfwR6Lf0EDaMcnmAb6hd2D0xw= -github.com/spacemeshos/economics v0.1.3 h1:ACkq3mTebIky4Zwbs9SeSSRZrUCjU/Zk0wq9Z0BTh2A= -github.com/spacemeshos/economics v0.1.3/go.mod h1:FH7u0FzTIm6Kpk+X5HOZDvpkgNYBKclmH86rVwYaDAo= +github.com/spacemeshos/economics v0.1.4 h1:twlawrcQhYNqPgyDv08+24EL/OgUKz3d7q+PvJIAND0= +github.com/spacemeshos/economics v0.1.4/go.mod h1:6HKWKiKdxjVQcGa2z/wA0LR4M/DzKib856bP16yqNmQ= github.com/spacemeshos/fixed v0.1.2 h1:pENQ8pXFAqin3f15ZLoOVVeSgcmcFJ0IFdFm4+9u4SM= github.com/spacemeshos/fixed v0.1.2/go.mod h1:OekUZD7FA9Ji8H/WEf5VuGYxPB+mWfXjbUI7I3qcT48= github.com/spacemeshos/go-scale v1.2.0 h1:ZlA2L1ILym2gmyJUwUdLTiyP1ZIG0U4xE9nFVFLi83M= From ad1026d227b55ff403da3c258f05ead31c4fd7b6 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:48:44 +0000 Subject: [PATCH 30/73] Update CHANGELOG for v1.7.4 (#6374) ## Motivation Updates the `CHANGELOG` in preparation for the v1.7.4 release --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 113315dd28..2aa75b9cb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ See [RELEASE](./RELEASE.md) for workflow instructions. +## v1.7.4 + +### Improvements + +* [#6370](https://github.com/spacemeshos/go-spacemesh/pull/6370) Fix an issue in v2alpha1 account service API. + ## v1.7.3 ### Upgrade information From 86b78a24f49421fd1cb40a0d1639b5d99eff77b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 07:49:39 +0000 Subject: [PATCH 31/73] build(deps): Bump golang.org/x/time from 0.6.0 to 0.7.0 (#6376) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index cce905dab5..2bb25e490f 100644 --- a/go.mod +++ b/go.mod @@ -57,7 +57,7 @@ require ( go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/sync v0.8.0 - golang.org/x/time v0.6.0 + golang.org/x/time v0.7.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.34.2 diff --git a/go.sum b/go.sum index 473e88b7d2..7482661c22 100644 --- a/go.sum +++ b/go.sum @@ -886,8 +886,8 @@ golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From e6a9f2ae49d600dd825446621d14aae331fd3d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20R=C3=B3=C5=BCa=C5=84ski?= Date: Mon, 7 Oct 2024 11:49:22 +0200 Subject: [PATCH 32/73] review feedback: remove common error --- activation/activation.go | 16 ++++++---------- activation/activation_test.go | 2 +- activation/atx_service_db.go | 12 ++++++++++-- activation/interface.go | 9 +++++++++ common/errors.go | 5 ----- sql/database.go | 3 +-- 6 files changed, 27 insertions(+), 20 deletions(-) delete mode 100644 common/errors.go diff --git a/activation/activation.go b/activation/activation.go index 5769f600ae..69222bced6 100644 --- a/activation/activation.go +++ b/activation/activation.go @@ -19,7 +19,6 @@ import ( "github.com/spacemeshos/go-spacemesh/activation/metrics" "github.com/spacemeshos/go-spacemesh/activation/wire" "github.com/spacemeshos/go-spacemesh/codec" - "github.com/spacemeshos/go-spacemesh/common" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/events" "github.com/spacemeshos/go-spacemesh/log" @@ -31,10 +30,7 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" ) -var ( - ErrNotFound = errors.New("not found") - errNilVrfNonce = errors.New("nil VRF nonce") -) +var errNilVrfNonce = errors.New("nil VRF nonce") // PoetConfig is the configuration to interact with the poet server. type PoetConfig struct { @@ -351,7 +347,7 @@ func (b *Builder) BuildInitialPost(ctx context.Context, nodeID types.NodeID) err case err == nil: b.logger.Info("load initial post from db") return nil - case errors.Is(err, common.ErrNotFound): + case errors.Is(err, sql.ErrNotFound): b.logger.Info("creating initial post") default: return fmt.Errorf("get initial post: %w", err) @@ -527,7 +523,7 @@ func (b *Builder) BuildNIPostChallenge(ctx context.Context, nodeID types.NodeID) switch { case err == nil: currentEpochId = max(currentEpochId, prevAtx.PublishEpoch) - case errors.Is(err, common.ErrNotFound): + case errors.Is(err, ErrNotFound): // no previous ATX case err != nil: return nil, fmt.Errorf("get last ATX: %w", err) @@ -576,7 +572,7 @@ func (b *Builder) BuildNIPostChallenge(ctx context.Context, nodeID types.NodeID) var challenge *types.NIPostChallenge switch { - case errors.Is(err, common.ErrNotFound): + case errors.Is(err, ErrNotFound): logger.Info("no previous ATX found, creating an initial nipost challenge") challenge, err = b.buildInitialNIPostChallenge(ctx, logger, nodeID, publishEpochId) @@ -614,7 +610,7 @@ func (b *Builder) getExistingChallenge( challenge, err := nipost.Challenge(b.localDB, nodeID) switch { - case errors.Is(err, common.ErrNotFound): + case errors.Is(err, sql.ErrNotFound): return nil, nil case err != nil: @@ -986,7 +982,7 @@ func (b *Builder) getPositioningAtx( func (b *Builder) Regossip(ctx context.Context, nodeID types.NodeID) error { epoch := b.layerClock.CurrentLayer().GetEpoch() id, blob, err := atxs.AtxBlob(b.localDB, epoch, nodeID) - if errors.Is(err, common.ErrNotFound) { + if errors.Is(err, sql.ErrNotFound) { return nil } else if err != nil { return err diff --git a/activation/activation_test.go b/activation/activation_test.go index 620e5afb5a..6d728a4e5c 100644 --- a/activation/activation_test.go +++ b/activation/activation_test.go @@ -894,7 +894,7 @@ func TestBuilder_PublishActivationTx_TargetsEpochBasedOnPosAtx(t *testing.T) { } posAtx.SetID(types.RandomATXID()) atxSvc.EXPECT().PositioningATX(gomock.Any(), gomock.Any()).Return(posAtx.ID(), nil) - atxSvc.EXPECT().LastATX(gomock.Any(), sig.NodeID()).Return(nil, sql.ErrNotFound).Times(2) + atxSvc.EXPECT().LastATX(gomock.Any(), sig.NodeID()).Return(nil, ErrNotFound).Times(2) // Act & Assert tab.msync.EXPECT().RegisterForATXSynced().DoAndReturn(closedChan).AnyTimes() diff --git a/activation/atx_service_db.go b/activation/atx_service_db.go index e84713aa6e..a2cf4fd5fb 100644 --- a/activation/atx_service_db.go +++ b/activation/atx_service_db.go @@ -2,6 +2,7 @@ package activation import ( "context" + "errors" "fmt" "time" @@ -71,12 +72,19 @@ func NewDBAtxService( } func (s *dbAtxService) Atx(_ context.Context, id types.ATXID) (*types.ActivationTx, error) { - return atxs.Get(s.db, id) + atx, err := atxs.Get(s.db, id) + if errors.Is(err, sql.ErrNotFound) { + return nil, ErrNotFound + } + return atx, err } func (s *dbAtxService) LastATX(ctx context.Context, id types.NodeID) (*types.ActivationTx, error) { atxid, err := atxs.GetLastIDByNodeID(s.db, id) - if err != nil { + switch { + case errors.Is(err, sql.ErrNotFound): + return nil, ErrNotFound + case err != nil: return nil, fmt.Errorf("getting last ATXID: %w", err) } return atxs.Get(s.db, atxid) diff --git a/activation/interface.go b/activation/interface.go index 092f3da7fc..c5c7c138a0 100644 --- a/activation/interface.go +++ b/activation/interface.go @@ -19,6 +19,8 @@ import ( //go:generate mockgen -typed -package=activation -destination=./mocks.go -source=./interface.go +var ErrNotFound = errors.New("not found") + type AtxReceiver interface { OnAtx(*types.ActivationTx) } @@ -110,9 +112,16 @@ type atxProvider interface { // AtxService provides ATXs needed by the ATX Builder. type AtxService interface { + // Get ATX with given ID + // + // Returns ErrNotFound if couldn't get the ATX. Atx(ctx context.Context, id types.ATXID) (*types.ActivationTx, error) + // Get the last ATX of the given identitity. + // + // Returns ErrNotFound if couldn't get the ATX. LastATX(ctx context.Context, nodeID types.NodeID) (*types.ActivationTx, error) // PositioningATX returns atx id with the highest tick height. + // // The maxPublish epoch is the maximum publish epoch of the returned ATX. PositioningATX(ctx context.Context, maxPublish types.EpochID) (types.ATXID, error) } diff --git a/common/errors.go b/common/errors.go deleted file mode 100644 index 4342b6fa07..0000000000 --- a/common/errors.go +++ /dev/null @@ -1,5 +0,0 @@ -package common - -import "errors" - -var ErrNotFound = errors.New("not found") diff --git a/sql/database.go b/sql/database.go index 17e9cdd8aa..a647086f4a 100644 --- a/sql/database.go +++ b/sql/database.go @@ -18,7 +18,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" - "github.com/spacemeshos/go-spacemesh/common" "github.com/spacemeshos/go-spacemesh/common/types" ) @@ -28,7 +27,7 @@ var ( // ErrNoConnection is returned if pooled connection is not available. ErrNoConnection = errors.New("database: no free connection") // ErrNotFound is returned if requested record is not found. - ErrNotFound = fmt.Errorf("database: %w", common.ErrNotFound) + ErrNotFound = errors.New("database: not found") // ErrObjectExists is returned if database constraints didn't allow to insert an object. ErrObjectExists = errors.New("database: object exists") // ErrTooNew is returned if database version is newer than expected. From 118ee7f539fcc0a8b20f2cea672091aab78eb7ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 18:47:43 +0000 Subject: [PATCH 33/73] build(deps): Bump google.golang.org/protobuf from 1.34.2 to 1.35.1 (#6377) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2bb25e490f..9d2506d0ec 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( golang.org/x/time v0.7.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240930140551-af27646dc61f google.golang.org/grpc v1.67.1 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.35.1 k8s.io/api v0.31.1 k8s.io/apimachinery v0.31.1 k8s.io/client-go v0.31.1 diff --git a/go.sum b/go.sum index 7482661c22..c4d5081928 100644 --- a/go.sum +++ b/go.sum @@ -963,8 +963,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 4f9b33044f59d16831688ba1489496be8a89410f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:44:09 +0000 Subject: [PATCH 34/73] build(deps): Bump github.com/spacemeshos/go-scale from 1.2.0 to 1.2.1 (#6383) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9d2506d0ec..9a536425ee 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/spacemeshos/api/release/go v1.54.0 github.com/spacemeshos/economics v0.1.4 github.com/spacemeshos/fixed v0.1.2 - github.com/spacemeshos/go-scale v1.2.0 + github.com/spacemeshos/go-scale v1.2.1 github.com/spacemeshos/merkle-tree v0.2.4 github.com/spacemeshos/poet v0.10.4 github.com/spacemeshos/post v0.12.9 diff --git a/go.sum b/go.sum index c4d5081928..8c2a956fa4 100644 --- a/go.sum +++ b/go.sum @@ -635,8 +635,8 @@ github.com/spacemeshos/economics v0.1.4 h1:twlawrcQhYNqPgyDv08+24EL/OgUKz3d7q+Pv github.com/spacemeshos/economics v0.1.4/go.mod h1:6HKWKiKdxjVQcGa2z/wA0LR4M/DzKib856bP16yqNmQ= github.com/spacemeshos/fixed v0.1.2 h1:pENQ8pXFAqin3f15ZLoOVVeSgcmcFJ0IFdFm4+9u4SM= github.com/spacemeshos/fixed v0.1.2/go.mod h1:OekUZD7FA9Ji8H/WEf5VuGYxPB+mWfXjbUI7I3qcT48= -github.com/spacemeshos/go-scale v1.2.0 h1:ZlA2L1ILym2gmyJUwUdLTiyP1ZIG0U4xE9nFVFLi83M= -github.com/spacemeshos/go-scale v1.2.0/go.mod h1:HV6e3/X5h9u2aFpYKJxt7PY/fBuLBegEKWgeZJ+/5jE= +github.com/spacemeshos/go-scale v1.2.1 h1:+IJ6KmFl9tF1Om8B1NvEwilGpBG1ebr4Se8A0Fe4puE= +github.com/spacemeshos/go-scale v1.2.1/go.mod h1:fpO6tCoKdUmvF6o9zkUtq2erSOH5t4ik02Zwdm31qOs= github.com/spacemeshos/merkle-tree v0.2.4 h1:kA7uRGadeyULOFlBxsWRwN0v1U2B4PD4OluR1l3d4nE= github.com/spacemeshos/merkle-tree v0.2.4/go.mod h1:yTJd262m3pjnw8mH0j5vt3w0J+2mpM6g0xyc5Pr2zIw= github.com/spacemeshos/poet v0.10.4 h1:MHGG1dhMVwy5DdlsmwdRLDQTTqlPA21lSQB2PVd8MSk= From 5a40816d2bd503f53c9fa5a0476fe7fd2d8506db Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:29:35 +0000 Subject: [PATCH 35/73] Malfeasance proof db update (#6378) ## Motivation This separates the persistence for malfeasance proofs based on v1 and v2. For v1 proofs will stay in the `identities` table and the code storing and fetching those proofs has been simplified. For v2 information about marriages moves to the new `marriages` table, and malfeasance proofs into the new `malfeasance` table. --- activation/e2e/atx_merge_test.go | 14 +- activation/e2e/checkpoint_merged_test.go | 12 +- activation/handler_v1.go | 37 +- activation/handler_v2.go | 85 +++- activation/handler_v2_test.go | 209 ++++------ api/grpcserver/v2alpha1/malfeasance.go | 4 +- atxsdata/warmup.go | 5 +- beacon/handlers.go | 18 +- checkpoint/recovery.go | 28 +- checkpoint/recovery_collecting_deps_test.go | 8 +- checkpoint/runner.go | 27 +- common/types/checkpoint.go | 11 +- datastore/store.go | 21 +- datastore/store_test.go | 107 +++-- fetch/handler.go | 10 +- hare3/hare.go | 8 +- hare4/hare.go | 8 +- mesh/mesh.go | 2 +- sql/database.go | 11 +- sql/database_test.go | 20 +- sql/identities/identities.go | 244 ++--------- sql/identities/identities_test.go | 213 +--------- sql/localsql/schema/schema.sql | 2 +- sql/malfeasance/malfeasance.go | 70 ++++ sql/malfeasance/malfeasance_test.go | 200 +++++++++ sql/marriage/marriages.go | 175 ++++++++ sql/marriage/marriages_test.go | 394 ++++++++++++++++++ sql/migrations.go | 23 +- sql/schema.go | 31 +- .../0023_posts_has_publish_epoch.sql | 1 - .../schema/migrations/0024_malfeasance.sql | 69 +++ sql/statesql/schema/schema.sql | 97 +++-- 32 files changed, 1405 insertions(+), 759 deletions(-) create mode 100644 sql/malfeasance/malfeasance.go create mode 100644 sql/malfeasance/malfeasance_test.go create mode 100644 sql/marriage/marriages.go create mode 100644 sql/marriage/marriages_test.go create mode 100644 sql/statesql/schema/migrations/0024_malfeasance.sql diff --git a/activation/e2e/atx_merge_test.go b/activation/e2e/atx_merge_test.go index 3243dd7b7e..2ee456de0e 100644 --- a/activation/e2e/atx_merge_test.go +++ b/activation/e2e/atx_merge_test.go @@ -28,9 +28,9 @@ import ( "github.com/spacemeshos/go-spacemesh/p2p/pubsub/mocks" "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql/atxs" - "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/localsql" "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/statesql" "github.com/spacemeshos/go-spacemesh/system" smocks "github.com/spacemeshos/go-spacemesh/system/mocks" @@ -205,9 +205,9 @@ func Test_MarryAndMerge(t *testing.T) { logger := zaptest.NewLogger(t) goldenATX := types.ATXID{2, 3, 4} cfg := testPostConfig() - db := statesql.InMemory() + db := statesql.InMemoryTest(t) cdb := datastore.NewCachedDB(db, logger) - localDB := localsql.InMemory() + localDB := localsql.InMemoryTest(t) svc := grpcserver.NewPostService(logger, grpcserver.PostServiceQueryInterval(100*time.Millisecond)) svc.AllowConnections(true) @@ -362,11 +362,11 @@ func Test_MarryAndMerge(t *testing.T) { // Verify marriage for i, signer := range signers { - marriage, err := identities.Marriage(db, signer.NodeID()) + info, err := marriage.FindByNodeID(db, signer.NodeID()) require.NoError(t, err) - require.NotNil(t, marriage) - require.Equal(t, marriageATX.ID(), marriage.ATX) - require.Equal(t, i, marriage.Index) + require.NotNil(t, info) + require.Equal(t, marriageATX.ID(), info.ATX) + require.Equal(t, i, info.MarriageIndex) } // Step 2. Publish merged ATX together diff --git a/activation/e2e/checkpoint_merged_test.go b/activation/e2e/checkpoint_merged_test.go index 21e5c0af27..dbd2d7925c 100644 --- a/activation/e2e/checkpoint_merged_test.go +++ b/activation/e2e/checkpoint_merged_test.go @@ -27,8 +27,8 @@ import ( "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql/accounts" "github.com/spacemeshos/go-spacemesh/sql/atxs" - "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/localsql" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/statesql" smocks "github.com/spacemeshos/go-spacemesh/system/mocks" "github.com/spacemeshos/go-spacemesh/timesync" @@ -43,9 +43,9 @@ func Test_CheckpointAfterMerge(t *testing.T) { logger := zaptest.NewLogger(t) goldenATX := types.ATXID{2, 3, 4} cfg := testPostConfig() - db := statesql.InMemory() + db := statesql.InMemoryTest(t) cdb := datastore.NewCachedDB(db, logger) - localDB := localsql.InMemory() + localDB := localsql.InMemoryTest(t) svc := grpcserver.NewPostService(logger, grpcserver.PostServiceQueryInterval(100*time.Millisecond)) svc.AllowConnections(true) @@ -268,10 +268,10 @@ func Test_CheckpointAfterMerge(t *testing.T) { // 3.3 Verify IDs are still married for i, signer := range signers { - marriage, err := identities.Marriage(newDB, signer.NodeID()) + info, err := marriage.FindByNodeID(newDB, signer.NodeID()) require.NoError(t, err) - require.Equal(t, marriageATX.ID(), marriage.ATX) - require.Equal(t, i, marriage.Index) + require.Equal(t, marriageATX.ID(), info.ATX) + require.Equal(t, i, info.MarriageIndex) } checkpointedMerged, err := atxs.Get(newDB, mergedATX.ID()) diff --git a/activation/handler_v1.go b/activation/handler_v1.go index 647cd7cdb5..85cd805685 100644 --- a/activation/handler_v1.go +++ b/activation/handler_v1.go @@ -286,13 +286,8 @@ func (h *HandlerV1) validateNonInitialAtx( // cacheAtx caches the atx in the atxsdata cache. // Returns true if the atx was cached, false otherwise. -func (h *HandlerV1) cacheAtx(ctx context.Context, atx *types.ActivationTx) *atxsdata.ATX { +func (h *HandlerV1) cacheAtx(ctx context.Context, atx *types.ActivationTx, malicious bool) *atxsdata.ATX { if !h.atxsdata.IsEvicted(atx.TargetEpoch()) { - malicious, err := identities.IsMalicious(h.cdb, atx.SmesherID) - if err != nil { - h.logger.Error("failed is malicious read", zap.Error(err), log.ZContext(ctx)) - return nil - } return h.atxsdata.AddFromAtx(atx, malicious) } return nil @@ -348,11 +343,7 @@ func (h *HandlerV1) checkDoublePublish( Data: &atxProof, }, } - encoded, err := codec.Encode(proof) - if err != nil { - h.logger.Panic("failed to encode malfeasance proof", zap.Error(err)) - } - if err := identities.SetMalicious(tx, atx.SmesherID, encoded, time.Now()); err != nil { + if err := identities.SetMalicious(tx, atx.SmesherID, codec.MustEncode(proof), time.Now()); err != nil { return nil, fmt.Errorf("add malfeasance proof: %w", err) } @@ -451,13 +442,6 @@ func (h *HandlerV1) checkMalicious( tx sql.Transaction, watx *wire.ActivationTxV1, ) (*mwire.MalfeasanceProof, error) { - malicious, err := identities.IsMalicious(tx, watx.SmesherID) - if err != nil { - return nil, fmt.Errorf("checking if node is malicious: %w", err) - } - if malicious { - return nil, nil - } proof, err := h.checkDoublePublish(ctx, tx, watx) if proof != nil || err != nil { return proof, err @@ -471,12 +455,21 @@ func (h *HandlerV1) storeAtx( atx *types.ActivationTx, watx *wire.ActivationTxV1, ) (*mwire.MalfeasanceProof, error) { - var proof *mwire.MalfeasanceProof + var ( + proof *mwire.MalfeasanceProof + malicious bool + ) if err := h.cdb.WithTx(ctx, func(tx sql.Transaction) error { var err error - proof, err = h.checkMalicious(ctx, tx, watx) + malicious, err = identities.IsMalicious(tx, atx.SmesherID) if err != nil { - return fmt.Errorf("check malicious: %w", err) + return fmt.Errorf("check if node is malicious: %w", err) + } + if !malicious { + proof, err = h.checkMalicious(ctx, tx, watx) + if err != nil { + return fmt.Errorf("check malicious: %w", err) + } } err = atxs.Add(tx, atx, watx.Blob()) @@ -499,7 +492,7 @@ func (h *HandlerV1) storeAtx( h.tortoise.OnMalfeasance(atx.SmesherID) } - added := h.cacheAtx(ctx, atx) + added := h.cacheAtx(ctx, atx, malicious || proof != nil) h.beacon.OnAtx(atx) if added != nil { h.tortoise.OnAtx(atx.TargetEpoch(), atx.ID(), added) diff --git a/activation/handler_v2.go b/activation/handler_v2.go index f675eb2c7e..7136dd46a1 100644 --- a/activation/handler_v2.go +++ b/activation/handler_v2.go @@ -28,7 +28,8 @@ import ( "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/atxs" - "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/malfeasance" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/system" ) @@ -367,7 +368,7 @@ func (h *HandlerV2) validatePositioningAtx(publish types.EpochID, golden, positi return posAtx.TickHeight(), nil } -type marriage struct { +type marriageInfo struct { id types.NodeID signature types.EdSignature } @@ -375,12 +376,12 @@ type marriage struct { // Validate marriages and return married IDs. // Note: The order of returned IDs is important and must match the order of the marriage certificates. // The MarriageIndex in PoST proof matches the index in this marriage slice. -func (h *HandlerV2) validateMarriages(atx *wire.ActivationTxV2) ([]marriage, error) { +func (h *HandlerV2) validateMarriages(atx *wire.ActivationTxV2) ([]marriageInfo, error) { if len(atx.Marriages) == 0 { return nil, nil } marryingIDsSet := make(map[types.NodeID]struct{}, len(atx.Marriages)) - var marryingIDs []marriage + var marryingIDs []marriageInfo for i, m := range atx.Marriages { var id types.NodeID if m.ReferenceAtx == types.EmptyATXID { @@ -400,7 +401,7 @@ func (h *HandlerV2) validateMarriages(atx *wire.ActivationTxV2) ([]marriage, err return nil, fmt.Errorf("more than 1 marriage certificate for ID %s", id) } marryingIDsSet[id] = struct{}{} - marryingIDs = append(marryingIDs, marriage{ + marryingIDs = append(marryingIDs, marriageInfo{ id: id, signature: m.Signature, }) @@ -413,7 +414,7 @@ func (h *HandlerV2) equivocationSet(atx *wire.ActivationTxV2) ([]types.NodeID, e if atx.MarriageATX == nil { return []types.NodeID{atx.SmesherID}, nil } - marriageAtxID, err := identities.MarriageATX(h.cdb, atx.SmesherID) + info, err := marriage.FindByNodeID(h.cdb, atx.SmesherID) switch { case errors.Is(err, sql.ErrNotFound): return nil, errors.New("smesher is not married") @@ -421,8 +422,8 @@ func (h *HandlerV2) equivocationSet(atx *wire.ActivationTxV2) ([]types.NodeID, e return nil, fmt.Errorf("fetching smesher's marriage atx ID: %w", err) } - if *atx.MarriageATX != marriageAtxID { - return nil, fmt.Errorf("smesher's marriage ATX ID mismatch: %s != %s", *atx.MarriageATX, marriageAtxID) + if *atx.MarriageATX != info.ATX { + return nil, fmt.Errorf("smesher's marriage ATX ID mismatch: %s != %s", *atx.MarriageATX, info.ATX) } marriageAtx, err := atxs.Get(h.cdb, *atx.MarriageATX) @@ -436,8 +437,7 @@ func (h *HandlerV2) equivocationSet(atx *wire.ActivationTxV2) ([]types.NodeID, e marriageAtx.PublishEpoch, ) } - - return identities.EquivocationSetByMarriageATX(h.cdb, *atx.MarriageATX) + return marriage.NodeIDsByID(h.cdb, info.ID) } type idData struct { @@ -452,7 +452,7 @@ type activationTx struct { weight uint64 effectiveUnits uint32 ids map[types.NodeID]idData - marriages []marriage + marriages []marriageInfo } type nipostSize struct { @@ -675,7 +675,7 @@ func (h *HandlerV2) syntacticallyValidateDeps( } func (h *HandlerV2) checkMalicious(ctx context.Context, tx sql.Transaction, atx *activationTx) (bool, error) { - malicious, err := identities.IsMalicious(tx, atx.SmesherID) + malicious, err := malfeasance.IsMalicious(tx, atx.SmesherID) if err != nil { return malicious, fmt.Errorf("checking if node is malicious: %w", err) } @@ -735,19 +735,19 @@ func (h *HandlerV2) fetchWireAtx( func (h *HandlerV2) checkDoubleMarry(ctx context.Context, tx sql.Transaction, atx *activationTx) (bool, error) { for _, m := range atx.marriages { - mATXID, err := identities.MarriageATX(tx, m.id) + info, err := marriage.FindByNodeID(tx, m.id) if err != nil { return false, fmt.Errorf("checking if ID is married: %w", err) } - if mATXID == atx.ID() { + if info.ATX == atx.ID() { continue } - otherAtx, err := h.fetchWireAtx(ctx, tx, mATXID) + otherAtx, err := h.fetchWireAtx(ctx, tx, info.ATX) switch { case errors.Is(err, errAtxNotV2): h.logger.Fatal("Failed to create double marry malfeasance proof: ATX is not v2", - zap.Stringer("atx_id", mATXID), + zap.Stringer("atx_id", info.ATX), ) case err != nil: return false, fmt.Errorf("fetching other ATX: %w", err) @@ -853,15 +853,58 @@ func (h *HandlerV2) checkPrevAtx(ctx context.Context, tx sql.Transaction, atx *a func (h *HandlerV2) storeAtx(ctx context.Context, atx *types.ActivationTx, watx *activationTx) error { if err := h.cdb.WithTx(ctx, func(tx sql.Transaction) error { if len(watx.marriages) != 0 { - marriageData := identities.MarriageData{ + newMarriageID, err := marriage.NewID(tx) + if err != nil { + return fmt.Errorf("creating marriage ID: %w", err) + } + info := marriage.Info{ + ID: newMarriageID, ATX: atx.ID(), Target: atx.SmesherID, } + malicious := false + marriageIDs := make([]marriage.ID, 0) for i, m := range watx.marriages { - marriageData.Signature = m.signature - marriageData.Index = i - if err := identities.SetMarriage(tx, m.id, &marriageData); err != nil { - return err + info.NodeID = m.id + info.MarriageIndex = i + info.Signature = m.signature + err := marriage.Add(tx, info) + switch { + case errors.Is(err, sql.ErrConflict): + id, err := marriage.FindIDByNodeID(tx, m.id) + if err != nil { + return fmt.Errorf("find marriage ID for node ID %s: %w", m.id.ShortString(), err) + } + marriageIDs = append(marriageIDs, id) + continue + case err != nil: + return fmt.Errorf("adding marriage: %w", err) + } + if malicious { + continue + } + malicious, err = malfeasance.IsMalicious(tx, m.id) + if err != nil { + return fmt.Errorf("checking if node is malicious: %w", err) + } + } + if len(marriageIDs) != 0 { + marriageIDs := append(marriageIDs, newMarriageID) + combinedID := slices.Min(marriageIDs) + for _, id := range marriageIDs { + if id != combinedID { + if err := marriage.UpdateMarriageID(tx, id, combinedID); err != nil { + return fmt.Errorf("updating marriage ID for %d: %w", id, err) + } + } + } + newMarriageID = combinedID + } + if malicious { + for _, m := range watx.marriages { + if err := malfeasance.SetMalicious(tx, m.id, newMarriageID, time.Now()); err != nil { + return fmt.Errorf("marking node as malicious: %w", err) + } } } } diff --git a/activation/handler_v2_test.go b/activation/handler_v2_test.go index c2299164ed..34d97ae844 100644 --- a/activation/handler_v2_test.go +++ b/activation/handler_v2_test.go @@ -17,7 +17,6 @@ import ( "github.com/spacemeshos/go-spacemesh/activation/wire" "github.com/spacemeshos/go-spacemesh/atxsdata" - "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/datastore" "github.com/spacemeshos/go-spacemesh/fetch" @@ -25,7 +24,8 @@ import ( "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/atxs" - "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/malfeasance" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) @@ -47,7 +47,7 @@ const ( func newV2TestHandler(tb testing.TB, golden types.ATXID) *v2TestHandler { lg := zaptest.NewLogger(tb) - cdb := datastore.NewCachedDB(statesql.InMemory(), lg) + cdb := datastore.NewCachedDB(statesql.InMemoryTest(tb), lg) mocks := newTestHandlerMocks(tb, golden) return &v2TestHandler{ HandlerV2: &HandlerV2{ @@ -614,19 +614,19 @@ func TestHandlerV2_ProcessSoloATX(t *testing.T) { } func marryIDs( - t testing.TB, + tb testing.TB, atxHandler *v2TestHandler, signers []*signing.EdSigner, golden types.ATXID, ) (marriage *wire.ActivationTxV2, other []*wire.ActivationTxV2) { sig := signers[0] - mATX := newInitialATXv2(t, golden) + mATX := newInitialATXv2(tb, golden) mATX.Marriages = []wire.MarriageCertificate{{ Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), }} for _, signer := range signers[1:] { - atx := atxHandler.createAndProcessInitial(t, signer) + atx := atxHandler.createAndProcessInitial(tb, signer) other = append(other, atx) mATX.Marriages = append(mATX.Marriages, wire.MarriageCertificate{ ReferenceAtx: atx.ID(), @@ -637,7 +637,7 @@ func marryIDs( mATX.Sign(sig) atxHandler.expectInitialAtxV2(mATX) err := atxHandler.processATX(context.Background(), "", mATX, time.Now()) - require.NoError(t, err) + require.NoError(tb, err) return mATX, other } @@ -1280,29 +1280,14 @@ func Test_ValidateMarriages(t *testing.T) { t.Run("marriage ATX must be published 2 epochs prior merging IDs", func(t *testing.T) { t.Parallel() atxHandler := newV2TestHandler(t, golden) - otherSigner, err := signing.NewEdSigner() - require.NoError(t, err) - otherAtx := atxHandler.createAndProcessInitial(t, otherSigner) - marriage := newInitialATXv2(t, golden) - marriage.PublishEpoch = 1 - marriage.Marriages = []wire.MarriageCertificate{ - { - Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - { - ReferenceAtx: otherAtx.ID(), - Signature: otherSigner.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - } - marriage.Sign(sig) - - atxHandler.expectInitialAtxV2(marriage) - err = atxHandler.processATX(context.Background(), "", marriage, time.Now()) + otherSig, err := signing.NewEdSigner() require.NoError(t, err) - atx := newSoloATXv2(t, marriage.PublishEpoch+1, types.RandomATXID(), golden) - marriageATXID := marriage.ID() + marriageATX, _ := marryIDs(t, atxHandler, []*signing.EdSigner{sig, otherSig}, golden) + + atx := newSoloATXv2(t, marriageATX.PublishEpoch+1, types.RandomATXID(), golden) + marriageATXID := marriageATX.ID() atx.MarriageATX = &marriageATXID atx.Sign(sig) @@ -1313,28 +1298,12 @@ func Test_ValidateMarriages(t *testing.T) { t.Parallel() atxHandler := newV2TestHandler(t, golden) - otherSigner, err := signing.NewEdSigner() + otherSig, err := signing.NewEdSigner() require.NoError(t, err) - otherAtx := atxHandler.createAndProcessInitial(t, otherSigner) - - marriage := newInitialATXv2(t, golden) - marriage.PublishEpoch = 1 - marriage.Marriages = []wire.MarriageCertificate{ - { - Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - { - ReferenceAtx: otherAtx.ID(), - Signature: otherSigner.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - } - marriage.Sign(sig) - atxHandler.expectInitialAtxV2(marriage) - err = atxHandler.processATX(context.Background(), "", marriage, time.Now()) - require.NoError(t, err) + marriageATX, _ := marryIDs(t, atxHandler, []*signing.EdSigner{sig, otherSig}, golden) - atx := newSoloATXv2(t, marriage.PublishEpoch+1, types.RandomATXID(), golden) + atx := newSoloATXv2(t, marriageATX.PublishEpoch+1, types.RandomATXID(), golden) marriageATXID := types.RandomATXID() atx.MarriageATX = &marriageATXID atx.Sign(sig) @@ -1381,7 +1350,7 @@ func Test_ValidateMarriages(t *testing.T) { set, err := atxHandler.equivocationSet(atx) require.NoError(t, err) - require.Equal(t, expectedSet, set) + require.ElementsMatch(t, expectedSet, set) }) } @@ -1608,32 +1577,19 @@ func Test_Marriages(t *testing.T) { otherSig, err := signing.NewEdSigner() require.NoError(t, err) - othersAtx := atxHandler.createAndProcessInitial(t, otherSig) + atx, _ := marryIDs(t, atxHandler, []*signing.EdSigner{sig, otherSig}, golden) - atx := newInitialATXv2(t, golden) - atx.Marriages = []wire.MarriageCertificate{ - { - Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - { - ReferenceAtx: othersAtx.ID(), - Signature: otherSig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - } - atx.Sign(sig) - - err = atxHandler.processInitial(t, atx) + info, err := marriage.FindByNodeID(atxHandler.cdb, sig.NodeID()) require.NoError(t, err) + require.Equal(t, atx.ID(), info.ATX) - mAtx, err := identities.MarriageATX(atxHandler.cdb, sig.NodeID()) + info, err = marriage.FindByNodeID(atxHandler.cdb, otherSig.NodeID()) require.NoError(t, err) - require.Equal(t, atx.ID(), mAtx) + require.Equal(t, atx.ID(), info.ATX) - mAtx, err = identities.MarriageATX(atxHandler.cdb, otherSig.NodeID()) + id, err := marriage.FindIDByNodeID(atxHandler.cdb, sig.NodeID()) require.NoError(t, err) - require.Equal(t, atx.ID(), mAtx) - - set, err := identities.EquivocationSet(atxHandler.cdb, sig.NodeID()) + set, err := marriage.NodeIDsByID(atxHandler.cdb, id) require.NoError(t, err) require.ElementsMatch(t, []types.NodeID{sig.NodeID(), otherSig.NodeID()}, set) }) @@ -1675,23 +1631,7 @@ func Test_Marriages(t *testing.T) { otherSig, err := signing.NewEdSigner() require.NoError(t, err) - othersAtx := atxHandler.createAndProcessInitial(t, otherSig) - - atx := newInitialATXv2(t, golden) - atx.Marriages = []wire.MarriageCertificate{ - { - Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - { - ReferenceAtx: othersAtx.ID(), - Signature: otherSig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), - }, - } - atx.Sign(sig) - - atxHandler.expectInitialAtxV2(atx) - err = atxHandler.processATX(context.Background(), "", atx, time.Now()) - require.NoError(t, err) + atx, _ := marryIDs(t, atxHandler, []*signing.EdSigner{sig, otherSig}, golden) // otherSig2 cannot marry sig, trying to extend its set. otherSig2, err := signing.NewEdSigner() @@ -1716,22 +1656,62 @@ func Test_Marriages(t *testing.T) { _, ok := data.(*wire.ProofDoubleMarry) return ok }), - ).DoAndReturn(func(ctx context.Context, id types.NodeID, proof wire.Proof) error { + ).DoAndReturn(func(_ context.Context, _ types.NodeID, proof wire.Proof) error { malProof := proof.(*wire.ProofDoubleMarry) nId, err := malProof.Valid(atxHandler.edVerifier) require.NoError(t, err) require.Equal(t, sig.NodeID(), nId) - b := codec.MustEncode(malProof) - _ = b return nil }) err = atxHandler.processATX(context.Background(), "", atx2, time.Now()) require.NoError(t, err) - // The equivocation set of sig and otherSig didn't grow - equiv, err := identities.EquivocationSet(atxHandler.cdb, sig.NodeID()) + // The equivocation set of sig and otherSig were merged + id, err := marriage.FindIDByNodeID(atxHandler.cdb, sig.NodeID()) require.NoError(t, err) - require.ElementsMatch(t, []types.NodeID{sig.NodeID(), otherSig.NodeID()}, equiv) + equiv, err := marriage.NodeIDsByID(atxHandler.cdb, id) + require.NoError(t, err) + require.ElementsMatch(t, []types.NodeID{sig.NodeID(), otherSig.NodeID(), otherSig2.NodeID()}, equiv) + }) + t.Run("marring into existing malicious equivocation set sets identity as malicious", func(t *testing.T) { + t.Parallel() + atxHandler := newV2TestHandler(t, golden) + + otherSig, err := signing.NewEdSigner() + require.NoError(t, err) + atx, _ := marryIDs(t, atxHandler, []*signing.EdSigner{sig, otherSig}, golden) + + // sig becomes malicious in some way and with it otherSig + id, err := marriage.FindIDByNodeID(atxHandler.cdb, sig.NodeID()) + require.NoError(t, err) + require.NoError(t, malfeasance.AddProof(atxHandler.cdb, sig.NodeID(), &id, []byte("proof"), 0, time.Now())) + require.NoError(t, malfeasance.SetMalicious(atxHandler.cdb, otherSig.NodeID(), id, time.Now())) + + // otherSig2 cannot marry sig, trying to extend its set. + otherSig2, err := signing.NewEdSigner() + require.NoError(t, err) + others2Atx := atxHandler.createAndProcessInitial(t, otherSig2) + atx2 := newSoloATXv2(t, atx.PublishEpoch+1, atx.ID(), atx.ID()) + atx2.Marriages = []wire.MarriageCertificate{ + { + Signature: sig.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), + }, + { + ReferenceAtx: others2Atx.ID(), + Signature: otherSig2.Sign(signing.MARRIAGE, sig.NodeID().Bytes()), + }, + } + atx2.Sign(sig) + atxHandler.expectAtxV2(atx2) + err = atxHandler.processATX(context.Background(), "", atx2, time.Now()) + require.NoError(t, err) + + // The equivocation set of sig and otherSig were merged + id, err = marriage.FindIDByNodeID(atxHandler.cdb, sig.NodeID()) + require.NoError(t, err) + equiv, err := marriage.NodeIDsByID(atxHandler.cdb, id) + require.NoError(t, err) + require.ElementsMatch(t, []types.NodeID{sig.NodeID(), otherSig.NodeID(), otherSig2.NodeID()}, equiv) }) t.Run("signer must marry self", func(t *testing.T) { t.Parallel() @@ -1762,26 +1742,13 @@ func Test_MarryingMalicious(t *testing.T) { golden := types.RandomATXID() sig, err := signing.NewEdSigner() require.NoError(t, err) + otherSig, err := signing.NewEdSigner() require.NoError(t, err) - tt := []struct { - name string - malicious types.NodeID - }{ - { - name: "owner is malicious", - malicious: sig.NodeID(), - }, { - name: "other is malicious", - malicious: otherSig.NodeID(), - }, - } - - for _, tc := range tt { - t.Run(tc.name, func(t *testing.T) { + tc := func(malicious types.NodeID) func(t *testing.T) { + return func(t *testing.T) { atxHandler := newV2TestHandler(t, golden) - othersAtx := atxHandler.createAndProcessInitial(t, otherSig) atx := newInitialATXv2(t, golden) @@ -1794,23 +1761,29 @@ func Test_MarryingMalicious(t *testing.T) { }, } atx.Sign(sig) - require.NoError(t, identities.SetMalicious(atxHandler.cdb, tc.malicious, []byte("proof"), time.Now())) + require.NoError(t, malfeasance.AddProof(atxHandler.cdb, malicious, nil, []byte("proof"), 0, time.Now())) atxHandler.expectInitialAtxV2(atx) err := atxHandler.processATX(context.Background(), "", atx, time.Now()) require.NoError(t, err) - equiv, err := identities.EquivocationSet(atxHandler.cdb, sig.NodeID()) + id, err := marriage.FindIDByNodeID(atxHandler.cdb, sig.NodeID()) + require.NoError(t, err) + equiv, err := marriage.NodeIDsByID(atxHandler.cdb, id) require.NoError(t, err) require.ElementsMatch(t, []types.NodeID{sig.NodeID(), otherSig.NodeID()}, equiv) for _, id := range []types.NodeID{sig.NodeID(), otherSig.NodeID()} { - m, err := identities.IsMalicious(atxHandler.cdb, id) + m, err := malfeasance.IsMalicious(atxHandler.cdb, id) require.NoError(t, err) - require.True(t, m) + require.True(t, m, "expected %s to be malicious, owner %s other %s", id, sig, otherSig) } - }) + } } + + t.Run("owner is malicious", tc(sig.NodeID())) + + t.Run("other is malicious", tc(otherSig.NodeID())) } func TestContextualValidation_DoublePost(t *testing.T) { @@ -1899,7 +1872,7 @@ func Test_CalculatingUnits(t *testing.T) { func TestContextual_PreviousATX(t *testing.T) { golden := types.RandomATXID() - atxHndlr := newV2TestHandler(t, golden) + atxHdlr := newV2TestHandler(t, golden) var ( signers []*signing.EdSigner eqSet []types.NodeID @@ -1911,13 +1884,13 @@ func TestContextual_PreviousATX(t *testing.T) { eqSet = append(eqSet, sig.NodeID()) } - mATX, otherAtxs := marryIDs(t, atxHndlr, signers, golden) + mATX, otherAtxs := marryIDs(t, atxHdlr, signers, golden) // signer 1 creates a solo ATX soloAtx := newSoloATXv2(t, mATX.PublishEpoch+1, otherAtxs[0].ID(), mATX.ID()) soloAtx.Sign(signers[1]) - atxHndlr.expectAtxV2(soloAtx) - err := atxHndlr.processATX(context.Background(), "", soloAtx, time.Now()) + atxHdlr.expectAtxV2(soloAtx) + err := atxHdlr.processATX(context.Background(), "", soloAtx, time.Now()) require.NoError(t, err) // create a MergedATX for all IDs @@ -1935,9 +1908,9 @@ func TestContextual_PreviousATX(t *testing.T) { merged.MarriageATX = &matxID merged.Sign(signers[0]) - atxHndlr.expectMergedAtxV2(merged, eqSet, []uint64{100}) - atxHndlr.mMalPublish.EXPECT().Publish(gomock.Any(), signers[1].NodeID(), gomock.Any()) - err = atxHndlr.processATX(context.Background(), "", merged, time.Now()) + atxHdlr.expectMergedAtxV2(merged, eqSet, []uint64{100}) + atxHdlr.mMalPublish.EXPECT().Publish(gomock.Any(), signers[1].NodeID(), gomock.Any()) + err = atxHdlr.processATX(context.Background(), "", merged, time.Now()) require.NoError(t, err) } diff --git a/api/grpcserver/v2alpha1/malfeasance.go b/api/grpcserver/v2alpha1/malfeasance.go index bd0b2d7417..d2f9b5b41d 100644 --- a/api/grpcserver/v2alpha1/malfeasance.go +++ b/api/grpcserver/v2alpha1/malfeasance.go @@ -71,7 +71,7 @@ func (s *MalfeasanceService) List( } proofs := make([]*spacemeshv2alpha1.MalfeasanceProof, 0, request.Limit) - if err := identities.IterateMaliciousOps(s.db, ops, func(id types.NodeID, proof []byte, received time.Time) bool { + if err := identities.IterateOps(s.db, ops, func(id types.NodeID, proof []byte, received time.Time) bool { rst := toProof(ctx, s.info, id, proof) if rst == nil { return true @@ -209,7 +209,7 @@ func (s *MalfeasanceStreamService) fetchFromDB( go func() { defer close(dbChan) - if err := identities.IterateMaliciousOps(s.db, ops, + if err := identities.IterateOps(s.db, ops, func(id types.NodeID, proof []byte, received time.Time) bool { rst := toProof(ctx, s.info, id, proof) if rst == nil { diff --git a/atxsdata/warmup.go b/atxsdata/warmup.go index f4ea14eefb..e1f0736796 100644 --- a/atxsdata/warmup.go +++ b/atxsdata/warmup.go @@ -10,6 +10,7 @@ import ( "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/atxs" + "github.com/spacemeshos/go-spacemesh/sql/builder" "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/layers" ) @@ -82,9 +83,9 @@ func Warmup(db sql.Executor, cache *Data, keep types.EpochID, logger *zap.Logger } logger.Info("Finished reading ATXs. Starting reading malfeasance", zap.Duration("duration", time.Since(start))) start = time.Now() - err = identities.IterateMalicious(db, func(_ int, id types.NodeID) error { + err = identities.IterateOps(db, builder.Operations{}, func(id types.NodeID, _ []byte, _ time.Time) bool { cache.SetMalicious(id) - return nil + return true }) if err != nil { return fmt.Errorf("warming up atxdata with malfeasance: %w", err) diff --git a/beacon/handlers.go b/beacon/handlers.go index 89d838e985..6252562cfa 100644 --- a/beacon/handlers.go +++ b/beacon/handlers.go @@ -296,19 +296,15 @@ func (pd *ProtocolDriver) HandleFirstVotes(ctx context.Context, peer p2p.Peer, m } func (pd *ProtocolDriver) verifyFirstVotes(ctx context.Context, m FirstVotingMessage) (types.NodeID, error) { - messageBytes, err := codec.Encode(&m.FirstVotingMessageBody) - if err != nil { - pd.logger.Fatal("failed to serialize first voting message", - log.ZContext(ctx), - zap.Uint32("epoch", m.EpochID.Uint32()), - zap.Uint32("round", uint32(types.FirstRound)), - zap.Error(err), - ) - } - if !pd.edVerifier.Verify(signing.BEACON_FIRST_MSG, m.SmesherID, messageBytes, m.Signature) { + if !pd.edVerifier.Verify( + signing.BEACON_FIRST_MSG, + m.SmesherID, + codec.MustEncode(&m.FirstVotingMessageBody), + m.Signature, + ) { return types.EmptyNodeID, fmt.Errorf("[round %v] verify signature %s: failed", types.FirstRound, m.Signature) } - if err = pd.registerVoted(m.EpochID, m.SmesherID, types.FirstRound); err != nil { + if err := pd.registerVoted(m.EpochID, m.SmesherID, types.FirstRound); err != nil { return types.EmptyNodeID, fmt.Errorf( "[round %v] register proposal (miner ID %v): %w", types.FirstRound, diff --git a/checkpoint/recovery.go b/checkpoint/recovery.go index 15d312f663..aeb1a51c7b 100644 --- a/checkpoint/recovery.go +++ b/checkpoint/recovery.go @@ -23,11 +23,11 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/accounts" "github.com/spacemeshos/go-spacemesh/sql/atxs" "github.com/spacemeshos/go-spacemesh/sql/atxsync" - "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/localsql" localmigrations "github.com/spacemeshos/go-spacemesh/sql/localsql/migrations" "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" "github.com/spacemeshos/go-spacemesh/sql/malsync" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/poets" "github.com/spacemeshos/go-spacemesh/sql/recovery" "github.com/spacemeshos/go-spacemesh/sql/statesql" @@ -198,7 +198,7 @@ func RecoverWithDb( type recoveryData struct { accounts []*types.Account atxs []*atxs.CheckpointAtx - marriages map[types.NodeID]*identities.MarriageData + marriages []marriage.Info } func RecoverFromLocalFile( @@ -306,9 +306,9 @@ func RecoverFromLocalFile( log.ZShortStringer("smesherID", cAtx.SmesherID), ) } - for id, marriage := range data.marriages { - if err = identities.SetMarriage(tx, id, marriage); err != nil { - return fmt.Errorf("add marriage for %s: %w", id.String(), err) + for _, info := range data.marriages { + if err = marriage.Add(tx, info); err != nil { + return fmt.Errorf("add marriage for %s: %w", info.NodeID.String(), err) } } @@ -386,16 +386,18 @@ func checkpointData(fs afero.Fs, file string, newGenesis types.LayerID) (*recove cAtx.Units = atx.Units allAtxs = append(allAtxs, &cAtx) } - marriages := make(map[types.NodeID]*identities.MarriageData, len(checkpoint.Data.Marriages)) - for atx, ms := range checkpoint.Data.Marriages { + marriages := make([]marriage.Info, 0, len(checkpoint.Data.Marriages)) + for id, ms := range checkpoint.Data.Marriages { for _, m := range ms { - marriage := identities.MarriageData{ - ATX: atx, - Index: m.Index, - Signature: types.EdSignature(m.Signature), - Target: types.BytesToNodeID(m.MarriedTo), + info := marriage.Info{ + ID: marriage.ID(id), + NodeID: types.BytesToNodeID(m.Signer), + ATX: types.ATXID(m.ATX), + MarriageIndex: m.Index, + Signature: types.EdSignature(m.Signature), + Target: types.BytesToNodeID(m.MarriedTo), } - marriages[types.BytesToNodeID(m.Signer)] = &marriage + marriages = append(marriages, info) } } diff --git a/checkpoint/recovery_collecting_deps_test.go b/checkpoint/recovery_collecting_deps_test.go index 3422ad6389..4dde7b0153 100644 --- a/checkpoint/recovery_collecting_deps_test.go +++ b/checkpoint/recovery_collecting_deps_test.go @@ -10,14 +10,14 @@ import ( "github.com/spacemeshos/go-spacemesh/activation/wire" "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/sql/atxs" - "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) func TestCollectingDeps(t *testing.T) { golden := types.RandomATXID() t.Run("collect marriage ATXs", func(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) marriageATX := &wire.ActivationTxV1{ InnerActivationTxV1: wire.InnerActivationTxV1{ @@ -47,9 +47,9 @@ func TestCollectingDeps(t *testing.T) { require.NoError(t, atxs.Add(db, atx, watx.Blob())) // marry the two IDs - err := identities.SetMarriage(db, marriageATX.SmesherID, &identities.MarriageData{ATX: marriageATX.ID()}) + err := marriage.Add(db, marriage.Info{ID: 1, ATX: marriageATX.ID(), NodeID: marriageATX.SmesherID}) require.NoError(t, err) - err = identities.SetMarriage(db, atx.SmesherID, &identities.MarriageData{ATX: marriageATX.ID()}) + err = marriage.Add(db, marriage.Info{ID: 1, ATX: marriageATX.ID(), NodeID: marriageATX.SmesherID}) require.NoError(t, err) all := map[types.ATXID]struct{}{golden: {}} diff --git a/checkpoint/runner.go b/checkpoint/runner.go index 965dd1ca00..614a7d7ffe 100644 --- a/checkpoint/runner.go +++ b/checkpoint/runner.go @@ -13,7 +13,9 @@ import ( "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/accounts" "github.com/spacemeshos/go-spacemesh/sql/atxs" + "github.com/spacemeshos/go-spacemesh/sql/builder" "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/marriage" ) const ( @@ -45,7 +47,7 @@ func checkpointDB( Version: SchemaVersion, Data: types.InnerData{ CheckpointId: fmt.Sprintf("snapshot-%d", snapshot), - Marriages: make(map[types.ATXID][]types.MarriageSnaphot), + Marriages: make(map[int][]types.MarriageSnapshot), }, } @@ -116,13 +118,15 @@ func checkpointDB( } checkpoint.Data.Accounts = append(checkpoint.Data.Accounts, a) } - err = identities.IterateMarriages(tx, func(id types.NodeID, data *identities.MarriageData) bool { - checkpoint.Data.Marriages[data.ATX] = append(checkpoint.Data.Marriages[data.ATX], types.MarriageSnaphot{ - Index: data.Index, - Signer: id.Bytes(), - MarriedTo: data.Target.Bytes(), - Signature: data.Signature.Bytes(), - }) + err = marriage.IterateOps(tx, builder.Operations{}, func(info marriage.Info) bool { + snapshot := types.MarriageSnapshot{ + ATX: info.ATX.Bytes(), + Index: info.MarriageIndex, + Signer: info.NodeID.Bytes(), + MarriedTo: info.Target.Bytes(), + Signature: info.Signature.Bytes(), + } + checkpoint.Data.Marriages[int(info.ID)] = append(checkpoint.Data.Marriages[int(info.ID)], snapshot) return true }) if err != nil { @@ -130,7 +134,14 @@ func checkpointDB( } // collect marriage ATXs + marriageATXs := make(map[types.ATXID]struct{}) for id := range checkpoint.Data.Marriages { + for _, m := range checkpoint.Data.Marriages[id] { + marriageATXs[types.ATXID(m.ATX)] = struct{}{} + } + } + + for id := range marriageATXs { atx, err := atxs.Get(tx, id) if err != nil { return nil, fmt.Errorf("getting marriage atx: %w", err) diff --git a/common/types/checkpoint.go b/common/types/checkpoint.go index 81184e6b30..5ae397d08f 100644 --- a/common/types/checkpoint.go +++ b/common/types/checkpoint.go @@ -7,10 +7,10 @@ type Checkpoint struct { } type InnerData struct { - CheckpointId string `json:"id"` - Atxs []AtxSnapshot `json:"atxs"` - Accounts []AccountSnapshot `json:"accounts"` - Marriages map[ATXID][]MarriageSnaphot `json:"marriages"` + CheckpointId string `json:"id"` + Atxs []AtxSnapshot `json:"atxs"` + Accounts []AccountSnapshot `json:"accounts"` + Marriages map[int][]MarriageSnapshot `json:"marriages"` } type AtxSnapshot struct { @@ -38,7 +38,8 @@ type AccountSnapshot struct { State []byte `json:"state"` } -type MarriageSnaphot struct { +type MarriageSnapshot struct { + ATX []byte `json:"atx"` Index int `json:"index"` MarriedTo []byte `json:"marriedTo"` Signer []byte `json:"signer"` diff --git a/datastore/store.go b/datastore/store.go index f1316e5e68..256301e52e 100644 --- a/datastore/store.go +++ b/datastore/store.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "sync" + "time" lru "github.com/hashicorp/golang-lru/v2" "go.uber.org/zap" @@ -17,6 +18,7 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/atxs" "github.com/spacemeshos/go-spacemesh/sql/ballots" "github.com/spacemeshos/go-spacemesh/sql/blocks" + "github.com/spacemeshos/go-spacemesh/sql/builder" "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/poets" "github.com/spacemeshos/go-spacemesh/sql/transactions" @@ -196,20 +198,15 @@ func (db *CachedDB) Previous(id types.ATXID) ([]types.ATXID, error) { func (db *CachedDB) IterateMalfeasanceProofs( iter func(types.NodeID, []byte) error, ) error { - ids, err := identities.GetMalicious(db) - if err != nil { + var callbackErr error + if err := identities.IterateOps(db, builder.Operations{}, + func(id types.NodeID, proof []byte, _ time.Time) bool { + callbackErr = iter(id, proof) + return callbackErr == nil + }); err != nil { return err } - for _, id := range ids { - proof, err := db.MalfeasanceProof(id) - if err != nil { - return err - } - if err := iter(id, proof); err != nil { - return err - } - } - return nil + return callbackErr } func (db *CachedDB) MaxHeightAtx() (types.ATXID, error) { diff --git a/datastore/store_test.go b/datastore/store_test.go index 4517fb5682..d67e7d5550 100644 --- a/datastore/store_test.go +++ b/datastore/store_test.go @@ -3,6 +3,7 @@ package datastore_test import ( "bytes" "context" + "errors" "os" "testing" "time" @@ -38,12 +39,7 @@ type blobId interface { Bytes() []byte } -func getBytes( - ctx context.Context, - bs *datastore.BlobStore, - hint datastore.Hint, - id blobId, -) ([]byte, error) { +func getBytes(ctx context.Context, bs *datastore.BlobStore, hint datastore.Hint, id blobId) ([]byte, error) { var blob sql.Blob if err := bs.LoadBlob(ctx, hint, id.Bytes(), &blob); err != nil { return nil, err @@ -52,7 +48,7 @@ func getBytes( } func TestMalfeasanceProof_Dishonest(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) cdb := datastore.NewCachedDB(db, zaptest.NewLogger(t)) require.Equal(t, 0, cdb.MalfeasanceCacheSize()) @@ -67,10 +63,40 @@ func TestMalfeasanceProof_Dishonest(t *testing.T) { require.EqualValues(t, proof, got) } +func TestIterateMalfeasanceProofs(t *testing.T) { + db := statesql.InMemoryTest(t) + cdb := datastore.NewCachedDB(db, zaptest.NewLogger(t)) + require.Equal(t, 0, cdb.MalfeasanceCacheSize()) + + proofs := map[types.NodeID][]byte{ + {1}: types.RandomBytes(100), + {2}: types.RandomBytes(100), + {3}: types.RandomBytes(100), + } + for id, proof := range proofs { + require.NoError(t, identities.SetMalicious(db, id, proof, time.Now())) + } + + gotProofs := make(map[types.NodeID][]byte) + require.NoError(t, cdb.IterateMalfeasanceProofs(func(id types.NodeID, proof []byte) error { + gotProofs[id] = proof + return nil + })) + require.Equal(t, proofs, gotProofs) + + // stop early + gotProofs = make(map[types.NodeID][]byte) + callbackErr := errors.New("stop") + err := cdb.IterateMalfeasanceProofs(func(id types.NodeID, proof []byte) error { + gotProofs[id] = proof + return callbackErr + }) + require.ErrorIs(t, err, callbackErr) +} + func TestBlobStore_GetATXBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() atx := &types.ActivationTx{ PublishEpoch: types.EpochID(22), @@ -85,7 +111,7 @@ func TestBlobStore_GetATXBlob(t *testing.T) { require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.ATXDB, atx.ID()) + _, err = getBytes(context.Background(), bs, datastore.ATXDB, atx.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) blob := types.AtxBlob{Blob: types.RandomBytes(100)} @@ -94,18 +120,17 @@ func TestBlobStore_GetATXBlob(t *testing.T) { has, err = bs.Has(datastore.ATXDB, atx.ID().Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.ATXDB, atx.ID()) + got, err := getBytes(context.Background(), bs, datastore.ATXDB, atx.ID()) require.NoError(t, err) require.Equal(t, blob.Blob, got) - _, err = getBytes(ctx, bs, datastore.BallotDB, atx.ID()) + _, err = getBytes(context.Background(), bs, datastore.BallotDB, atx.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) } func TestBlobStore_GetBallotBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() sig, err := signing.NewEdSigner() require.NoError(t, err) @@ -118,14 +143,14 @@ func TestBlobStore_GetBallotBlob(t *testing.T) { has, err := bs.Has(datastore.BallotDB, blt.ID().Bytes()) require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.BallotDB, blt.ID()) + _, err = getBytes(context.Background(), bs, datastore.BallotDB, blt.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, ballots.Add(db, blt)) has, err = bs.Has(datastore.BallotDB, blt.ID().Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.BallotDB, blt.ID()) + got, err := getBytes(context.Background(), bs, datastore.BallotDB, blt.ID()) require.NoError(t, err) var gotB types.Ballot require.NoError(t, codec.Decode(got, &gotB)) @@ -133,14 +158,13 @@ func TestBlobStore_GetBallotBlob(t *testing.T) { require.NoError(t, gotB.Initialize()) require.Equal(t, *blt, gotB) - _, err = getBytes(ctx, bs, datastore.BlockDB, blt.ID()) + _, err = getBytes(context.Background(), bs, datastore.BlockDB, blt.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) } func TestBlobStore_GetBlockBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() blk := types.Block{ InnerBlock: types.InnerBlock{ @@ -154,28 +178,27 @@ func TestBlobStore_GetBlockBlob(t *testing.T) { require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.BlockDB, blk.ID()) + _, err = getBytes(context.Background(), bs, datastore.BlockDB, blk.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, blocks.Add(db, &blk)) has, err = bs.Has(datastore.BlockDB, blk.ID().Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.BlockDB, blk.ID()) + got, err := getBytes(context.Background(), bs, datastore.BlockDB, blk.ID()) require.NoError(t, err) var gotB types.Block require.NoError(t, codec.Decode(got, &gotB)) gotB.Initialize() require.Equal(t, blk, gotB) - _, err = getBytes(ctx, bs, datastore.ProposalDB, blk.ID()) + _, err = getBytes(context.Background(), bs, datastore.ProposalDB, blk.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) } func TestBlobStore_GetPoetBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() ref := []byte("ref0") poet := []byte("proof0") @@ -186,7 +209,7 @@ func TestBlobStore_GetPoetBlob(t *testing.T) { require.NoError(t, err) require.False(t, has) - require.ErrorIs(t, bs.LoadBlob(ctx, datastore.POETDB, ref, &sql.Blob{}), datastore.ErrNotFound) + require.ErrorIs(t, bs.LoadBlob(context.Background(), datastore.POETDB, ref, &sql.Blob{}), datastore.ErrNotFound) var poetRef types.PoetProofRef copy(poetRef[:], ref) require.NoError(t, poets.Add(db, poetRef, poet, sid, rid)) @@ -195,17 +218,16 @@ func TestBlobStore_GetPoetBlob(t *testing.T) { require.True(t, has) var blob sql.Blob - require.NoError(t, bs.LoadBlob(ctx, datastore.POETDB, poetRef[:], &blob)) + require.NoError(t, bs.LoadBlob(context.Background(), datastore.POETDB, poetRef[:], &blob)) require.True(t, bytes.Equal(poet, blob.Bytes)) - require.ErrorIs(t, bs.LoadBlob(ctx, datastore.BlockDB, ref, &sql.Blob{}), datastore.ErrNotFound) + require.ErrorIs(t, bs.LoadBlob(context.Background(), datastore.BlockDB, ref, &sql.Blob{}), datastore.ErrNotFound) } func TestBlobStore_GetProposalBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) proposals := store.New() bs := datastore.NewBlobStore(db, proposals) - ctx := context.Background() signer, err := signing.NewEdSigner() require.NoError(t, err) @@ -224,14 +246,14 @@ func TestBlobStore_GetProposalBlob(t *testing.T) { has, err := bs.Has(datastore.ProposalDB, p.ID().Bytes()) require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.ProposalDB, p.ID()) + _, err = getBytes(context.Background(), bs, datastore.ProposalDB, p.ID()) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, proposals.Add(&p)) has, err = bs.Has(datastore.ProposalDB, p.ID().Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.ProposalDB, p.ID()) + got, err := getBytes(context.Background(), bs, datastore.ProposalDB, p.ID()) require.NoError(t, err) var gotP types.Proposal require.NoError(t, codec.Decode(got, &gotP)) @@ -240,9 +262,8 @@ func TestBlobStore_GetProposalBlob(t *testing.T) { } func TestBlobStore_GetTXBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() tx := &types.Transaction{} tx.Raw = []byte{1, 1, 1} @@ -252,25 +273,24 @@ func TestBlobStore_GetTXBlob(t *testing.T) { require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.TXDB, tx.ID) + _, err = getBytes(context.Background(), bs, datastore.TXDB, tx.ID) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, transactions.Add(db, tx, time.Now())) has, err = bs.Has(datastore.TXDB, tx.ID.Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.TXDB, tx.ID) + got, err := getBytes(context.Background(), bs, datastore.TXDB, tx.ID) require.NoError(t, err) require.Equal(t, tx.Raw, got) - _, err = getBytes(ctx, bs, datastore.BlockDB, tx.ID) + _, err = getBytes(context.Background(), bs, datastore.BlockDB, tx.ID) require.ErrorIs(t, err, datastore.ErrNotFound) } func TestBlobStore_GetMalfeasanceBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() proof := &mwire.MalfeasanceProof{ Layer: types.LayerID(11), @@ -289,22 +309,21 @@ func TestBlobStore_GetMalfeasanceBlob(t *testing.T) { require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.Malfeasance, nodeID) + _, err = getBytes(context.Background(), bs, datastore.Malfeasance, nodeID) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, identities.SetMalicious(db, nodeID, encoded, time.Now())) has, err = bs.Has(datastore.Malfeasance, nodeID.Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.Malfeasance, nodeID) + got, err := getBytes(context.Background(), bs, datastore.Malfeasance, nodeID) require.NoError(t, err) require.Equal(t, encoded, got) } func TestBlobStore_GetActiveSet(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) bs := datastore.NewBlobStore(db, store.New()) - ctx := context.Background() as := &types.EpochActiveSet{Epoch: 7} hash := types.ATXIDList(as.Set).Hash() @@ -313,14 +332,14 @@ func TestBlobStore_GetActiveSet(t *testing.T) { require.NoError(t, err) require.False(t, has) - _, err = getBytes(ctx, bs, datastore.ActiveSet, hash) + _, err = getBytes(context.Background(), bs, datastore.ActiveSet, hash) require.ErrorIs(t, err, datastore.ErrNotFound) require.NoError(t, activesets.Add(db, hash, as)) has, err = bs.Has(datastore.ActiveSet, hash.Bytes()) require.NoError(t, err) require.True(t, has) - got, err := getBytes(ctx, bs, datastore.ActiveSet, hash) + got, err := getBytes(context.Background(), bs, datastore.ActiveSet, hash) require.NoError(t, err) require.Equal(t, codec.MustEncode(as), got) } diff --git a/fetch/handler.go b/fetch/handler.go index f31fe882ac..411480ee44 100644 --- a/fetch/handler.go +++ b/fetch/handler.go @@ -46,7 +46,7 @@ func newHandler( // handleMaliciousIDsReq returns the IDs of all known malicious nodes. func (h *handler) handleMaliciousIDsReq(ctx context.Context, _ []byte) ([]byte, error) { - nodes, err := identities.GetMalicious(h.cdb) + nodes, err := identities.AllMalicious(h.cdb) if err != nil { return nil, fmt.Errorf("getting malicious IDs: %w", err) } @@ -54,16 +54,12 @@ func (h *handler) handleMaliciousIDsReq(ctx context.Context, _ []byte) ([]byte, malicious := &MaliciousIDs{ NodeIDs: nodes, } - data, err := codec.Encode(malicious) - if err != nil { - h.logger.Fatal("failed to encode malicious IDs", zap.Error(err)) - } - return data, nil + return codec.MustEncode(malicious), nil } func (h *handler) handleMaliciousIDsReqStream(ctx context.Context, msg []byte, s io.ReadWriter) error { if err := h.streamIDs(ctx, s, func(cbk retrieveCallback) error { - nodeIDs, err := identities.GetMalicious(h.cdb) + nodeIDs, err := identities.AllMalicious(h.cdb) if err != nil { return fmt.Errorf("getting malicious IDs: %w", err) } diff --git a/hare3/hare.go b/hare3/hare.go index 5eb085e092..50ace9df0a 100644 --- a/hare3/hare.go +++ b/hare3/hare.go @@ -337,10 +337,10 @@ func (h *Hare) Handler(ctx context.Context, _ p2p.Peer, buf []byte) error { if equivocation != nil && !malicious { h.log.Debug("registered equivocation", zap.Uint32("lid", msg.Layer.Uint32()), - zap.Stringer("sender", equivocation.Messages[0].SmesherID)) - proof := equivocation.ToMalfeasanceProof() - if err := identities.SetMalicious( - h.db, equivocation.Messages[0].SmesherID, codec.MustEncode(proof), time.Now()); err != nil { + zap.Stringer("sender", equivocation.Messages[0].SmesherID), + ) + proof := codec.MustEncode(equivocation.ToMalfeasanceProof()) + if err := identities.SetMalicious(h.db, equivocation.Messages[0].SmesherID, proof, time.Now()); err != nil { h.log.Error("failed to save malicious identity", zap.Error(err)) } h.atxsdata.SetMalicious(equivocation.Messages[0].SmesherID) diff --git a/hare4/hare.go b/hare4/hare.go index 19ac967330..123c37c1c5 100644 --- a/hare4/hare.go +++ b/hare4/hare.go @@ -548,10 +548,10 @@ func (h *Hare) Handler(ctx context.Context, peer p2p.Peer, buf []byte) error { if equivocation != nil && !malicious { h.log.Debug("registered equivocation", zap.Uint32("lid", msg.Layer.Uint32()), - zap.Stringer("sender", equivocation.Messages[0].SmesherID)) - proof := equivocation.ToMalfeasanceProof() - if err := identities.SetMalicious( - h.db, equivocation.Messages[0].SmesherID, codec.MustEncode(proof), time.Now()); err != nil { + zap.Stringer("sender", equivocation.Messages[0].SmesherID), + ) + proof := codec.MustEncode(equivocation.ToMalfeasanceProof()) + if err := identities.SetMalicious(h.db, equivocation.Messages[0].SmesherID, proof, time.Now()); err != nil { h.log.Error("failed to save malicious identity", zap.Error(err)) } h.atxsdata.SetMalicious(equivocation.Messages[0].SmesherID) diff --git a/mesh/mesh.go b/mesh/mesh.go index 7c80cf8174..d72dc954c3 100644 --- a/mesh/mesh.go +++ b/mesh/mesh.go @@ -573,7 +573,7 @@ func (msh *Mesh) AddBallot( // we call the hooks to notify tortoise and atxsdata if !malicious && ballot.IsMalicious() { // so this is a bit of double work (getting the malfeasance proof right after - // we stored it), BUT, probably negligble considering the amount of malfeasant + // we stored it), BUT, probably negligible considering the amount of malicious // identities we have. The other way to go about this is to allocate an individual channel // for every write (so that every writer gets its own response with the potential proof) // However I find that more costly than this approach. diff --git a/sql/database.go b/sql/database.go index a647086f4a..17e41c399f 100644 --- a/sql/database.go +++ b/sql/database.go @@ -30,6 +30,8 @@ var ( ErrNotFound = errors.New("database: not found") // ErrObjectExists is returned if database constraints didn't allow to insert an object. ErrObjectExists = errors.New("database: object exists") + // ErrConflict is returned if database constraints didn't allow to update an object. + ErrConflict = errors.New("database: conflict") // ErrTooNew is returned if database version is newer than expected. ErrTooNew = errors.New("database version is too new") // ErrOldSchema is returned when the database version differs from the expected one @@ -1149,15 +1151,18 @@ func GetBlobSizes(db Executor, cmd string, ids [][]byte) (sizes []int, err error // LoadBlob loads an encoded blob. func LoadBlob(db Executor, cmd string, id []byte, blob *Blob) error { - if rows, err := db.Exec(cmd, + rows, err := db.Exec(cmd, func(stmt *Statement) { stmt.BindBytes(1, id) }, func(stmt *Statement) bool { blob.FromColumn(stmt, 0) return true - }); err != nil { + }, + ) + if err != nil { return fmt.Errorf("get %v: %w", types.BytesToHash(id), err) - } else if rows == 0 { + } + if rows == 0 { return fmt.Errorf("%w: object %s", ErrNotFound, hex.EncodeToString(id)) } return nil diff --git a/sql/database_test.go b/sql/database_test.go index 4b528d704f..0690f618a9 100644 --- a/sql/database_test.go +++ b/sql/database_test.go @@ -22,7 +22,7 @@ func Test_Transaction_Isolation(t *testing.T) { WithConnections(10), WithLatencyMetering(true), WithDatabaseSchema(&Schema{ - Script: `create table testing1 ( + Script: `CREATE TABLE testing1 ( id varchar primary key, field int );`, @@ -195,7 +195,7 @@ func TestDatabaseVacuumState(t *testing.T) { require.NotContains(t, execSQL(t, db, "PRAGMA database_list", 2), "_migrate") require.Equal(t, "wal", execSQL(t, db, "PRAGMA journal_mode", 0)) require.Equal(t, "1", execSQL(t, db, "PRAGMA synchronous", 0)) // NORMAL - execSQL(t, db, "create table foo(x int)", -1) + execSQL(t, db, "CREATE TABLE foo(x int)", -1) return nil }).Times(1) @@ -211,7 +211,7 @@ func TestDatabaseVacuumState(t *testing.T) { // Synchronous is off for the temp database as it is deleted in case // of migration failure. require.Equal(t, "0", execSQL(t, db, "PRAGMA synchronous", 0)) // OFF - execSQL(t, db, "create table bar(y int)", -1) + execSQL(t, db, "CREATE TABLE bar(y int)", -1) return nil }).Times(1) @@ -273,7 +273,7 @@ func TestDatabaseVacuumStateError(t *testing.T) { migration1 := &sqlMigration{ order: 1, name: "0001_initial.sql", - content: "create table foo(x int)", + content: "CREATE TABLE foo(x int);", } fail := true @@ -285,7 +285,7 @@ func TestDatabaseVacuumStateError(t *testing.T) { if fail { return errors.New("migration failed") } - execSQL(t, db, "create table bar(y int)", -1) + execSQL(t, db, "CREATE TABLE bar(y int)", -1) return nil }).Times(2) @@ -364,14 +364,14 @@ func TestDropIncompleteMigration(t *testing.T) { migration1 := &sqlMigration{ order: 1, name: "0001_initial.sql", - content: "create table foo(x int)", + content: "CREATE TABLE foo(x int);", } migration2 := &faultyMigration{ panic: true, sqlMigration: &sqlMigration{ order: 2, name: "0002_test.sql", - content: "create table bar(y int)", + content: "CREATE TABLE bar(y int);", }, } @@ -428,7 +428,7 @@ func TestResumeCopyMigration(t *testing.T) { migration1 := &sqlMigration{ order: 1, name: "0001_initial.sql", - content: "create table foo(x int)", + content: "CREATE TABLE foo(x int);", } // This migration will panic when VACUUM INTO is attempted to copy // the migrated database to the source database location. @@ -437,7 +437,7 @@ func TestResumeCopyMigration(t *testing.T) { sqlMigration: &sqlMigration{ order: 2, name: "0002_test.sql", - content: "create table bar(y int)", + content: "CREATE TABLE bar(y int);", }, } @@ -552,7 +552,7 @@ func TestSchemaDrift(t *testing.T) { ) require.NoError(t, err) - _, err = db.Exec("create table newtbl (id int)", nil, nil) + _, err = db.Exec("CREATE TABLE newtbl (id int)", nil, nil) require.NoError(t, err) require.NoError(t, db.Close()) diff --git a/sql/identities/identities.go b/sql/identities/identities.go index df34f50296..d0659fd982 100644 --- a/sql/identities/identities.go +++ b/sql/identities/identities.go @@ -5,8 +5,6 @@ import ( "fmt" "time" - sqlite "github.com/go-llsqlite/crawshaw" - "github.com/spacemeshos/go-spacemesh/common/types" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/builder" @@ -14,16 +12,15 @@ import ( // SetMalicious records identity as malicious. func SetMalicious(db sql.Executor, nodeID types.NodeID, proof []byte, received time.Time) error { - _, err := db.Exec(`insert into identities (pubkey, proof, received) - values (?1, ?2, ?3) - ON CONFLICT(pubkey) DO UPDATE SET proof = excluded.proof - WHERE proof IS NULL;`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, nodeID.Bytes()) - stmt.BindBytes(2, proof) - stmt.BindInt64(3, received.UnixNano()) - }, nil, - ) + _, err := db.Exec(` + INSERT INTO identities (pubkey, proof, received) + VALUES (?1, ?2, ?3) + ON CONFLICT(pubkey) DO NOTHING + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + stmt.BindBytes(2, proof) + stmt.BindInt64(3, received.UnixNano()) + }, nil) if err != nil { return fmt.Errorf("set malicious %v: %w", nodeID, err) } @@ -33,15 +30,12 @@ func SetMalicious(db sql.Executor, nodeID types.NodeID, proof []byte, received t // IsMalicious returns true if identity is known to be malicious. func IsMalicious(db sql.Executor, nodeID types.NodeID) (bool, error) { rows, err := db.Exec(` - SELECT 1 FROM identities - WHERE ( - marriage_atx = (SELECT marriage_atx FROM identities WHERE pubkey = ?1 AND marriage_atx IS NOT NULL) - AND proof IS NOT NULL - ) - OR (pubkey = ?1 AND marriage_atx IS NULL AND proof IS NOT NULL);`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, nodeID.Bytes()) - }, nil) + SELECT 1 + FROM identities + WHERE pubkey = ?1 + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + }, nil) if err != nil { return false, fmt.Errorf("is malicious %v: %w", nodeID, err) } @@ -51,26 +45,23 @@ func IsMalicious(db sql.Executor, nodeID types.NodeID) (bool, error) { // GetBlobSizes returns the sizes of the blobs corresponding to malfeasance proofs for the // specified identities. For non-existent proofs, the corresponding items are set to -1. func GetBlobSizes(db sql.Executor, ids [][]byte) (sizes []int, err error) { - return sql.GetBlobSizes(db, "select pubkey, length(proof) from identities where pubkey in", ids) + return sql.GetBlobSizes(db, "SELECT pubkey, length(proof) FROM identities WHERE pubkey IN", ids) } // LoadMalfeasanceBlob returns the malfeasance proof in raw bytes for the given identity. func LoadMalfeasanceBlob(_ context.Context, db sql.Executor, nodeID []byte, blob *sql.Blob) error { - err := sql.LoadBlob(db, "select proof from identities where pubkey = ?1;", nodeID, blob) - if err == nil && len(blob.Bytes) == 0 { - return sql.ErrNotFound - } - return err + return sql.LoadBlob(db, "SELECT proof FROM identities WHERE pubkey = ?1;", nodeID, blob) } -func IterateMaliciousOps( +func IterateOps( db sql.Executor, operations builder.Operations, fn func(types.NodeID, []byte, time.Time) bool, ) error { - _, err := db.Exec( - "select pubkey, proof, received from identities"+builder.FilterFrom(operations), - builder.BindingsFrom(operations), + _, err := db.Exec(` + SELECT pubkey, proof, received + FROM identities + `+builder.FilterFrom(operations), builder.BindingsFrom(operations), func(stmt *sql.Statement) bool { var id types.NodeID stmt.ColumnBytes(0, id[:]) @@ -83,41 +74,20 @@ func IterateMaliciousOps( return err } -// IterateMalicious invokes the specified callback for each malicious node ID. -// It stops if the callback returns an error. -func IterateMalicious( - db sql.Executor, - callback func(total int, id types.NodeID) error, -) error { - var callbackErr error - dec := func(stmt *sql.Statement) bool { - var nid types.NodeID - total := stmt.ColumnInt(0) - stmt.ColumnBytes(1, nid[:]) - if callbackErr = callback(total, nid); callbackErr != nil { - return false - } - return true - } - - // Get total count in the same select statement to avoid the need for transaction - if _, err := db.Exec( - "select (select count(*) from identities where proof is not null) as total, "+ - "pubkey from identities where proof is not null", nil, dec); err != nil { - return fmt.Errorf("get malicious identities: %w", err) - } - - return callbackErr -} - -// GetMalicious retrieves malicious node IDs from the database. -func GetMalicious(db sql.Executor) (ids []types.NodeID, err error) { - if err = IterateMalicious(db, func(total int, nid types.NodeID) error { +// AllMalicious retrieves malicious node IDs from the database. +func AllMalicious(db sql.Executor) ([]types.NodeID, error) { + var ids []types.NodeID + if _, err := db.Exec(` + SELECT (SELECT COUNT(*) FROM identities) AS total, pubkey + FROM identities + `, nil, func(stmt *sql.Statement) bool { if ids == nil { - ids = make([]types.NodeID, 0, total) + ids = make([]types.NodeID, 0, stmt.ColumnInt(0)) } - ids = append(ids, nid) - return nil + var id types.NodeID + stmt.ColumnBytes(1, id[:]) + ids = append(ids, id) + return true }); err != nil { return nil, err } @@ -126,149 +96,3 @@ func GetMalicious(db sql.Executor) (ids []types.NodeID, err error) { } return ids, nil } - -// MarriageATX obtains the marriage ATX for given ID. -func MarriageATX(db sql.Executor, id types.NodeID) (types.ATXID, error) { - var atx types.ATXID - rows, err := db.Exec("SELECT marriage_atx FROM identities WHERE pubkey = ?1;", - func(stmt *sql.Statement) { - stmt.BindBytes(1, id.Bytes()) - }, func(stmt *sql.Statement) bool { - if stmt.ColumnType(0) != sqlite.SQLITE_NULL { - stmt.ColumnBytes(0, atx[:]) - } - return false - }) - if err != nil { - return atx, fmt.Errorf("getting marriage ATX for %v: %w", id, err) - } - if rows == 0 { - return atx, sql.ErrNotFound - } - return atx, nil -} - -type MarriageData struct { - ATX types.ATXID - Index int - Target types.NodeID // ID that was married to - Signature types.EdSignature -} - -func Marriage(db sql.Executor, id types.NodeID) (*MarriageData, error) { - var data MarriageData - rows, err := db.Exec(` - SELECT marriage_atx, marriage_idx, marriage_target, marriage_signature - FROM identities - WHERE pubkey = ?1 AND marriage_atx IS NOT NULL;`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, id.Bytes()) - }, func(stmt *sql.Statement) bool { - stmt.ColumnBytes(0, data.ATX[:]) - data.Index = int(stmt.ColumnInt64(1)) - stmt.ColumnBytes(2, data.Target[:]) - stmt.ColumnBytes(3, data.Signature[:]) - return false - }) - if err != nil { - return nil, fmt.Errorf("marriage %v: %w", id, err) - } - if rows == 0 { - return nil, sql.ErrNotFound - } - return &data, nil -} - -// Set marriage inserts marriage data for given identity. -// If identity doesn't exist - create it. -func SetMarriage(db sql.Executor, id types.NodeID, m *MarriageData) error { - _, err := db.Exec(` - INSERT INTO identities (pubkey, marriage_atx, marriage_idx, marriage_target, marriage_signature) - values (?1, ?2, ?3, ?4, ?5) - ON CONFLICT(pubkey) DO UPDATE SET - marriage_atx = excluded.marriage_atx, - marriage_idx = excluded.marriage_idx, - marriage_target = excluded.marriage_target, - marriage_signature = excluded.marriage_signature - WHERE marriage_atx IS NULL;`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, id.Bytes()) - stmt.BindBytes(2, m.ATX.Bytes()) - stmt.BindInt64(3, int64(m.Index)) - stmt.BindBytes(4, m.Target.Bytes()) - stmt.BindBytes(5, m.Signature.Bytes()) - }, nil, - ) - if err != nil { - return fmt.Errorf("setting marriage %v: %w", id, err) - } - return nil -} - -func IterateMarriages(db sql.Executor, cb func(id types.NodeID, data *MarriageData) bool) error { - _, err := db.Exec(` - SELECT pubkey, marriage_atx, marriage_idx, marriage_target, marriage_signature - FROM identities - WHERE marriage_atx IS NOT NULL;`, - nil, - func(stmt *sql.Statement) bool { - var id types.NodeID - var data MarriageData - stmt.ColumnBytes(0, id[:]) - stmt.ColumnBytes(1, data.ATX[:]) - data.Index = int(stmt.ColumnInt64(2)) - stmt.ColumnBytes(3, data.Target[:]) - stmt.ColumnBytes(4, data.Signature[:]) - return cb(id, &data) - }, - ) - return err -} - -// EquivocationSet returns all node IDs that are married to the given node ID -// including itself. -func EquivocationSet(db sql.Executor, id types.NodeID) ([]types.NodeID, error) { - var ids []types.NodeID - - rows, err := db.Exec(` - SELECT pubkey FROM identities - WHERE marriage_atx = (SELECT marriage_atx FROM identities WHERE pubkey = ?1) AND marriage_atx IS NOT NULL;`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, id.Bytes()) - }, - func(stmt *sql.Statement) bool { - var nid types.NodeID - stmt.ColumnBytes(0, nid[:]) - ids = append(ids, nid) - return true - }) - if err != nil { - return nil, fmt.Errorf("getting marriage for %v: %w", id, err) - } - if rows == 0 { - return []types.NodeID{id}, nil - } - - return ids, nil -} - -func EquivocationSetByMarriageATX(db sql.Executor, atx types.ATXID) ([]types.NodeID, error) { - var ids []types.NodeID - - _, err := db.Exec(` - SELECT pubkey FROM identities WHERE marriage_atx = ?1 ORDER BY marriage_idx ASC;`, - func(stmt *sql.Statement) { - stmt.BindBytes(1, atx.Bytes()) - }, - func(stmt *sql.Statement) bool { - var nid types.NodeID - stmt.ColumnBytes(0, nid[:]) - ids = append(ids, nid) - return true - }) - if err != nil { - return nil, fmt.Errorf("getting equivocation set by ID %s: %w", atx, err) - } - - return ids, nil -} diff --git a/sql/identities/identities_test.go b/sql/identities/identities_test.go index 44f3001673..8e357bc04f 100644 --- a/sql/identities/identities_test.go +++ b/sql/identities/identities_test.go @@ -17,7 +17,7 @@ import ( ) func TestMalicious(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) nodeID := types.NodeID{1, 1, 1, 1} mal, err := identities.IsMalicious(db, nodeID) @@ -60,8 +60,8 @@ func TestMalicious(t *testing.T) { } func Test_GetMalicious(t *testing.T) { - db := statesql.InMemory() - got, err := identities.GetMalicious(db) + db := statesql.InMemoryTest(t) + got, err := identities.AllMalicious(db) require.NoError(t, err) require.Nil(t, got) @@ -72,13 +72,13 @@ func Test_GetMalicious(t *testing.T) { bad = append(bad, nid) require.NoError(t, identities.SetMalicious(db, nid, types.RandomBytes(11), time.Now().Local())) } - got, err = identities.GetMalicious(db) + got, err = identities.AllMalicious(db) require.NoError(t, err) require.Equal(t, bad, got) } func TestLoadMalfeasanceBlob(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) ctx := context.Background() nid1 := types.RandomNodeID() @@ -119,193 +119,8 @@ func TestLoadMalfeasanceBlob(t *testing.T) { require.Equal(t, []int{len(blob1.Bytes), -1, len(blob2.Bytes)}, blobSizes) } -func TestMarriageATX(t *testing.T) { - t.Parallel() - t.Run("not married", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - - id := types.RandomNodeID() - _, err := identities.MarriageATX(db, id) - require.ErrorIs(t, err, sql.ErrNotFound) - }) - t.Run("married", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - - id := types.RandomNodeID() - marriage := identities.MarriageData{ - ATX: types.RandomATXID(), - Signature: types.RandomEdSignature(), - Index: 2, - Target: types.RandomNodeID(), - } - require.NoError(t, identities.SetMarriage(db, id, &marriage)) - got, err := identities.MarriageATX(db, id) - require.NoError(t, err) - require.Equal(t, marriage.ATX, got) - }) -} - -func TestMarriage(t *testing.T) { - t.Parallel() - - db := statesql.InMemory() - - id := types.RandomNodeID() - marriage := identities.MarriageData{ - ATX: types.RandomATXID(), - Signature: types.RandomEdSignature(), - Index: 2, - Target: types.RandomNodeID(), - } - require.NoError(t, identities.SetMarriage(db, id, &marriage)) - got, err := identities.Marriage(db, id) - require.NoError(t, err) - require.Equal(t, marriage, *got) -} - -func TestEquivocationSet(t *testing.T) { - t.Parallel() - t.Run("equivocation set of married IDs", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - - atx := types.RandomATXID() - ids := []types.NodeID{ - types.RandomNodeID(), - types.RandomNodeID(), - types.RandomNodeID(), - } - for i, id := range ids { - err := identities.SetMarriage(db, id, &identities.MarriageData{ - ATX: atx, - Index: i, - }) - require.NoError(t, err) - } - - for _, id := range ids { - mAtx, err := identities.MarriageATX(db, id) - require.NoError(t, err) - require.Equal(t, atx, mAtx) - set, err := identities.EquivocationSet(db, id) - require.NoError(t, err) - require.ElementsMatch(t, ids, set) - } - }) - t.Run("equivocation set for unmarried ID contains itself only", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - id := types.RandomNodeID() - set, err := identities.EquivocationSet(db, id) - require.NoError(t, err) - require.Equal(t, []types.NodeID{id}, set) - }) - t.Run("can't escape the marriage", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - atx := types.RandomATXID() - ids := []types.NodeID{ - types.RandomNodeID(), - types.RandomNodeID(), - } - for i, id := range ids { - err := identities.SetMarriage(db, id, &identities.MarriageData{ - ATX: atx, - Index: i, - }) - require.NoError(t, err) - } - - for _, id := range ids { - set, err := identities.EquivocationSet(db, id) - require.NoError(t, err) - require.ElementsMatch(t, ids, set) - } - - // try to marry via another random ATX - // the set should remain intact - err := identities.SetMarriage(db, ids[0], &identities.MarriageData{ - ATX: types.RandomATXID(), - }) - require.NoError(t, err) - for _, id := range ids { - set, err := identities.EquivocationSet(db, id) - require.NoError(t, err) - require.ElementsMatch(t, ids, set) - } - }) - t.Run("married doesn't become malicious immediately", func(t *testing.T) { - db := statesql.InMemory() - atx := types.RandomATXID() - id := types.RandomNodeID() - require.NoError(t, identities.SetMarriage(db, id, &identities.MarriageData{ATX: atx})) - - malicious, err := identities.IsMalicious(db, id) - require.NoError(t, err) - require.False(t, malicious) - - var blob sql.Blob - err = identities.LoadMalfeasanceBlob(context.Background(), db, id.Bytes(), &blob) - require.ErrorIs(t, err, sql.ErrNotFound) - require.Nil(t, blob.Bytes) - - ids, err := identities.GetMalicious(db) - require.NoError(t, err) - require.Empty(t, ids) - }) - t.Run("all IDs in equivocation set are malicious if one is", func(t *testing.T) { - t.Parallel() - db := statesql.InMemory() - atx := types.RandomATXID() - ids := []types.NodeID{ - types.RandomNodeID(), - types.RandomNodeID(), - } - for i, id := range ids { - require.NoError(t, identities.SetMarriage(db, id, &identities.MarriageData{ATX: atx, Index: i})) - } - - require.NoError(t, identities.SetMalicious(db, ids[0], []byte("proof"), time.Now())) - - for _, id := range ids { - malicious, err := identities.IsMalicious(db, id) - require.NoError(t, err) - require.True(t, malicious) - } - }) -} - -func TestEquivocationSetByMarriageATX(t *testing.T) { - t.Parallel() - - t.Run("married IDs", func(t *testing.T) { - db := statesql.InMemory() - ids := []types.NodeID{ - types.RandomNodeID(), - types.RandomNodeID(), - types.RandomNodeID(), - types.RandomNodeID(), - } - atx := types.RandomATXID() - for i, id := range ids { - require.NoError(t, identities.SetMarriage(db, id, &identities.MarriageData{ATX: atx, Index: i})) - } - set, err := identities.EquivocationSetByMarriageATX(db, atx) - require.NoError(t, err) - require.Equal(t, ids, set) - }) - t.Run("empty set", func(t *testing.T) { - db := statesql.InMemory() - set, err := identities.EquivocationSetByMarriageATX(db, types.RandomATXID()) - require.NoError(t, err) - require.Empty(t, set) - }) -} - func Test_IterateMaliciousOps(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) tt := []struct { id types.NodeID proof []byte @@ -333,7 +148,7 @@ func Test_IterateMaliciousOps(t *testing.T) { id types.NodeID proof []byte } - err := identities.IterateMaliciousOps(db, builder.Operations{}, + err := identities.IterateOps(db, builder.Operations{}, func(id types.NodeID, proof []byte, _ time.Time) bool { got = append(got, struct { id types.NodeID @@ -346,7 +161,7 @@ func Test_IterateMaliciousOps(t *testing.T) { } func Test_IterateMaliciousOpsWithFilter(t *testing.T) { - db := statesql.InMemory() + db := statesql.InMemoryTest(t) tt := []struct { id types.NodeID proof []byte @@ -357,7 +172,7 @@ func Test_IterateMaliciousOpsWithFilter(t *testing.T) { }, { types.RandomNodeID(), - nil, + types.RandomBytes(11), }, { types.RandomNodeID(), @@ -380,12 +195,8 @@ func Test_IterateMaliciousOpsWithFilter(t *testing.T) { Token: builder.In, Value: [][]byte{tt[0].id.Bytes(), tt[1].id.Bytes()}, // first two ids }) - ops.Filter = append(ops.Filter, builder.Op{ - Field: builder.Proof, - Token: builder.IsNotNull, // only entries which have a proof - }) - err := identities.IterateMaliciousOps(db, ops, func(id types.NodeID, proof []byte, _ time.Time) bool { + err := identities.IterateOps(db, ops, func(id types.NodeID, proof []byte, _ time.Time) bool { got = append(got, struct { id types.NodeID proof []byte @@ -393,6 +204,6 @@ func Test_IterateMaliciousOpsWithFilter(t *testing.T) { return true }) require.NoError(t, err) - // only the first element should be in the result - require.ElementsMatch(t, tt[:1], got) + // only the first two elements should be in the result + require.ElementsMatch(t, tt[:2], got) } diff --git a/sql/localsql/schema/schema.sql b/sql/localsql/schema/schema.sql index 02c44d3ccb..0b6a1c00f7 100755 --- a/sql/localsql/schema/schema.sql +++ b/sql/localsql/schema/schema.sql @@ -50,7 +50,6 @@ CREATE TABLE poet_certificates certificate BLOB NOT NULL, signature BLOB NOT NULL ); -CREATE UNIQUE INDEX idx_poet_certificates ON poet_certificates (node_id, certifier_id); CREATE TABLE poet_registration ( id CHAR(32) NOT NULL, @@ -81,3 +80,4 @@ CREATE TABLE prepared_activeset data BLOB NOT NULL, PRIMARY KEY (kind, epoch) ) WITHOUT ROWID; +CREATE UNIQUE INDEX idx_poet_certificates ON poet_certificates (node_id, certifier_id); diff --git a/sql/malfeasance/malfeasance.go b/sql/malfeasance/malfeasance.go new file mode 100644 index 0000000000..c45c47895d --- /dev/null +++ b/sql/malfeasance/malfeasance.go @@ -0,0 +1,70 @@ +package malfeasance + +import ( + "fmt" + "time" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/marriage" +) + +func IsMalicious(db sql.Executor, nodeID types.NodeID) (bool, error) { + rows, err := db.Exec(` + SELECT 1 + FROM malfeasance + WHERE pubkey = ?1 + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + }, nil) + if err != nil { + return false, fmt.Errorf("is malicious %v: %w", nodeID, err) + } + return rows > 0, nil +} + +func AddProof( + db sql.Executor, + nodeID types.NodeID, + marriageID *marriage.ID, + proof []byte, + domain int, + received time.Time, +) error { + _, err := db.Exec(` + INSERT INTO malfeasance (pubkey, marriage_id, proof, domain, received) + VALUES (?1, ?2, ?3, ?4, ?5) + ON CONFLICT(pubkey) DO NOTHING + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + if marriageID != nil { + stmt.BindInt64(2, int64(*marriageID)) + } + if proof != nil { + stmt.BindBytes(3, proof) + stmt.BindInt64(4, int64(domain)) + } + stmt.BindInt64(5, received.UnixNano()) + }, nil) + if err != nil { + return fmt.Errorf("add proof %v: %w", nodeID, err) + } + return nil +} + +func SetMalicious(db sql.Executor, nodeID types.NodeID, marriageID marriage.ID, received time.Time) error { + _, err := db.Exec(` + INSERT INTO malfeasance (pubkey, marriage_id, received) + VALUES (?1, ?2, ?3) + ON CONFLICT(pubkey) DO UPDATE SET + marriage_id = ?2 + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + stmt.BindInt64(2, int64(marriageID)) + stmt.BindInt64(3, received.UnixNano()) + }, nil) + if err != nil { + return fmt.Errorf("set malicious %v: %w", nodeID, err) + } + return nil +} diff --git a/sql/malfeasance/malfeasance_test.go b/sql/malfeasance/malfeasance_test.go new file mode 100644 index 0000000000..65bc13f5ab --- /dev/null +++ b/sql/malfeasance/malfeasance_test.go @@ -0,0 +1,200 @@ +package malfeasance_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/sql/malfeasance" + "github.com/spacemeshos/go-spacemesh/sql/marriage" + "github.com/spacemeshos/go-spacemesh/sql/statesql" +) + +func TestAdd(t *testing.T) { + t.Parallel() + + t.Run("without proof and marriage ID fails", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + err := malfeasance.AddProof(db, types.RandomNodeID(), nil, nil, 0, time.Now()) + require.Error(t, err) + }) + + t.Run("with proof and without marriage ID succeeds", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + err := malfeasance.AddProof(db, types.RandomNodeID(), nil, types.RandomBytes(100), 0, time.Now()) + require.NoError(t, err) + }) + + t.Run("without proof and with unknown marriage ID fails", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id := marriage.ID(100) + err := malfeasance.AddProof(db, types.RandomNodeID(), &id, nil, 0, time.Now()) + require.Error(t, err) + }) + + t.Run("without proof and with known marriage ID succeeds", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id, err := marriage.NewID(db) + require.NoError(t, err) + + nodeID := types.RandomNodeID() + err = marriage.Add(db, marriage.Info{ + ID: id, + NodeID: nodeID, + ATX: types.RandomATXID(), + MarriageIndex: 0, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + }) + require.NoError(t, err) + + err = malfeasance.AddProof(db, types.RandomNodeID(), &id, nil, 0, time.Now()) + require.NoError(t, err) + }) + + t.Run("with proof and with known marriage ID succeeds", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id, err := marriage.NewID(db) + require.NoError(t, err) + + nodeID := types.RandomNodeID() + err = marriage.Add(db, marriage.Info{ + ID: id, + NodeID: nodeID, + ATX: types.RandomATXID(), + MarriageIndex: 0, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + }) + require.NoError(t, err) + + err = malfeasance.AddProof(db, types.RandomNodeID(), &id, types.RandomBytes(100), 0, time.Now()) + require.NoError(t, err) + }) +} + +func TestIsMalicious(t *testing.T) { + t.Parallel() + + t.Run("unknown node is not malicious", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + mal, err := malfeasance.IsMalicious(db, types.RandomNodeID()) + require.NoError(t, err) + require.False(t, mal) + }) + + t.Run("known node is malicious", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + nodeID := types.RandomNodeID() + err := malfeasance.AddProof(db, nodeID, nil, types.RandomBytes(100), 0, time.Now()) + require.NoError(t, err) + + mal, err := malfeasance.IsMalicious(db, nodeID) + require.NoError(t, err) + require.True(t, mal) + }) +} + +func TestSetMalicious(t *testing.T) { + t.Parallel() + + t.Run("identity cannot be set malicious with unknown marriage ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + nodeID := types.RandomNodeID() + err := malfeasance.SetMalicious(db, nodeID, marriage.ID(0), time.Now()) + require.Error(t, err) + + mal, err := malfeasance.IsMalicious(db, nodeID) + require.NoError(t, err) + require.False(t, mal) + }) + + t.Run("identity can be set malicious with known marriage ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id, err := marriage.NewID(db) + require.NoError(t, err) + + nodeID := types.RandomNodeID() + err = marriage.Add(db, marriage.Info{ + ID: id, + NodeID: nodeID, + ATX: types.RandomATXID(), + MarriageIndex: 0, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + }) + require.NoError(t, err) + + err = malfeasance.SetMalicious(db, nodeID, id, time.Now()) + require.NoError(t, err) + + mal, err := malfeasance.IsMalicious(db, nodeID) + require.NoError(t, err) + require.True(t, mal) + }) + + t.Run("malfeasants marriage ID cannot be updated with SetMalicious to unknown ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + nodeID := types.RandomNodeID() + err := malfeasance.AddProof(db, nodeID, nil, types.RandomBytes(100), 0, time.Now()) + require.NoError(t, err) + + err = malfeasance.SetMalicious(db, nodeID, marriage.ID(0), time.Now()) + require.Error(t, err) + + mal, err := malfeasance.IsMalicious(db, nodeID) + require.NoError(t, err) + require.True(t, mal) + }) + + t.Run("malfeasants marriage ID can be updated with SetMalicious to known ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id, err := marriage.NewID(db) + require.NoError(t, err) + + nodeID := types.RandomNodeID() + err = malfeasance.AddProof(db, nodeID, nil, types.RandomBytes(100), 0, time.Now()) + require.NoError(t, err) + + err = marriage.Add(db, marriage.Info{ + ID: id, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: 0, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + }) + require.NoError(t, err) + + err = malfeasance.SetMalicious(db, nodeID, id, time.Now()) + require.NoError(t, err) + + mal, err := malfeasance.IsMalicious(db, nodeID) + require.NoError(t, err) + require.True(t, mal) + }) +} diff --git a/sql/marriage/marriages.go b/sql/marriage/marriages.go new file mode 100644 index 0000000000..d114c1fa58 --- /dev/null +++ b/sql/marriage/marriages.go @@ -0,0 +1,175 @@ +package marriage + +import ( + "fmt" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" +) + +type ID int + +type Info struct { + ID ID + NodeID types.NodeID + ATX types.ATXID + MarriageIndex int + Target types.NodeID + Signature types.EdSignature +} + +// NewID returns a new unique ID for a marriage. The ID is unique across all marriages. +// Use within a transaction to ensure that the returned ID is not used by another routine. +func NewID(db sql.Executor) (ID, error) { + var id ID + _, err := db.Exec(` + SELECT max(id) FROM marriages + `, nil, func(stmt *sql.Statement) bool { + id = ID(stmt.ColumnInt64(0) + 1) + return false + }) + if err != nil { + return 0, fmt.Errorf("getting max id: %w", err) + } + return id, nil +} + +// Add inserts a nodeID to the marriages table for the given MarriageID. +// If the nodeID already exists in the table, it is updated. +// Updates cannot change the MarriageID. +func Add(db sql.Executor, marriage Info) error { + rows, err := db.Exec(` + INSERT INTO marriages (id, pubkey, marriage_atx, marriage_idx, marriage_target, marriage_sig) + VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT(pubkey) DO UPDATE SET + marriage_atx = $3, + marriage_idx = $4, + marriage_target = $5, + marriage_sig = $6 + WHERE id = $1 + RETURNING 1 + `, func(s *sql.Statement) { + s.BindInt64(1, int64(marriage.ID)) + s.BindBytes(2, marriage.NodeID.Bytes()) + s.BindBytes(3, marriage.ATX.Bytes()) + s.BindInt64(4, int64(marriage.MarriageIndex)) + s.BindBytes(5, marriage.Target.Bytes()) + s.BindBytes(6, marriage.Signature.Bytes()) + }, nil) + if err != nil { + return fmt.Errorf("updating marriage set: %w", err) + } + if rows == 0 { + return fmt.Errorf("%w: tried to change marriage id for %s", sql.ErrConflict, marriage.NodeID) + } + return nil +} + +func UpdateMarriageID(db sql.Executor, oldID, newID ID) error { + _, err := db.Exec(` + UPDATE marriages + SET id = $1 + WHERE id = $2 + `, func(s *sql.Statement) { + s.BindInt64(1, int64(newID)) + s.BindInt64(2, int64(oldID)) + }, nil) + if err != nil { + return fmt.Errorf("updating marriage id: %w", err) + } + return nil +} + +func FindIDByNodeID(db sql.Executor, nodeID types.NodeID) (ID, error) { + var id ID + rows, err := db.Exec(` + SELECT id + FROM marriages + WHERE pubkey = $1 + `, func(s *sql.Statement) { + s.BindBytes(1, nodeID.Bytes()) + }, func(s *sql.Statement) bool { + id = ID(s.ColumnInt64(0)) + return false + }) + if err != nil { + return 0, fmt.Errorf("selecting marriage id: %w", err) + } + if rows == 0 { + return 0, sql.ErrNotFound + } + return id, nil +} + +func FindByNodeID(db sql.Executor, nodeID types.NodeID) (Info, error) { + var m Info + rows, err := db.Exec(` + SELECT id, marriage_atx, marriage_idx, marriage_target, marriage_sig + FROM marriages + WHERE pubkey = $1 + `, func(s *sql.Statement) { + s.BindBytes(1, nodeID.Bytes()) + }, func(s *sql.Statement) bool { + m.NodeID = nodeID + m.ID = ID(s.ColumnInt64(0)) + s.ColumnBytes(1, m.ATX[:]) + m.MarriageIndex = int(s.ColumnInt64(2)) + s.ColumnBytes(3, m.Target[:]) + s.ColumnBytes(4, m.Signature[:]) + return false + }) + if err != nil { + return m, fmt.Errorf("selecting marriage: %w", err) + } + if rows == 0 { + return m, sql.ErrNotFound + } + return m, nil +} + +func NodeIDsByID(db sql.Executor, id ID) ([]types.NodeID, error) { + var nodeIDs []types.NodeID + rows, err := db.Exec(` + SELECT pubkey + FROM marriages + WHERE id = $1 + `, func(s *sql.Statement) { + s.BindInt64(1, int64(id)) + }, func(s *sql.Statement) bool { + var nodeID types.NodeID + s.ColumnBytes(0, nodeID[:]) + nodeIDs = append(nodeIDs, nodeID) + return true + }) + if err != nil { + return nil, fmt.Errorf("select node IDs: %w", err) + } + if rows == 0 { + return nil, sql.ErrNotFound + } + return nodeIDs, nil +} + +func IterateOps( + db sql.Executor, + operations builder.Operations, + fn func(Info) bool, +) error { + _, err := db.Exec(` + SELECT id, pubkey, marriage_atx, marriage_idx, marriage_target, marriage_sig + FROM marriages + `+builder.FilterFrom(operations), builder.BindingsFrom(operations), + func(stmt *sql.Statement) bool { + var data Info + data.ID = ID(stmt.ColumnInt64(0)) + stmt.ColumnBytes(1, data.NodeID[:]) + stmt.ColumnBytes(2, data.ATX[:]) + data.MarriageIndex = int(stmt.ColumnInt64(3)) + stmt.ColumnBytes(4, data.Target[:]) + stmt.ColumnBytes(5, data.Signature[:]) + return fn(data) + }, + ) + return err +} diff --git a/sql/marriage/marriages_test.go b/sql/marriage/marriages_test.go new file mode 100644 index 0000000000..7a9a9a5b84 --- /dev/null +++ b/sql/marriage/marriages_test.go @@ -0,0 +1,394 @@ +package marriage_test + +import ( + "math/rand/v2" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" + "github.com/spacemeshos/go-spacemesh/sql/marriage" + "github.com/spacemeshos/go-spacemesh/sql/statesql" +) + +func TestFind(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + id, err := marriage.FindIDByNodeID(db, info.NodeID) + require.NoError(t, err) + require.Equal(t, id1, id) + info.ID = id1 + + res, err := marriage.FindByNodeID(db, info.NodeID) + require.NoError(t, err) + require.Equal(t, info, res) + + _, err = marriage.FindIDByNodeID(db, types.RandomNodeID()) + require.ErrorIs(t, err, sql.ErrNotFound) + + _, err = marriage.FindByNodeID(db, types.RandomNodeID()) + require.ErrorIs(t, err, sql.ErrNotFound) +} + +func TestAdd(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + id, err := marriage.FindIDByNodeID(db, info.NodeID) + require.NoError(t, err) + require.Equal(t, id1, id) + info.ID = id1 + + res, err := marriage.FindByNodeID(db, info.NodeID) + require.NoError(t, err) + require.Equal(t, info, res) + + // NewID should return a different ID + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id2) + require.NotEqual(t, id1, id2) +} + +func TestAddUpdatesExisting(t *testing.T) { + t.Parallel() + + t.Run("update marriage ATX and index", func(t *testing.T) { + // this updates the existing entry (e.g. when `nodeID` married a second time) + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + + err = marriage.Add(db, info) + require.NoError(t, err) + + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id2) + require.NotEqual(t, id1, id2) + + info = marriage.Info{ + ID: id1, + NodeID: info.NodeID, + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + res, err := marriage.FindByNodeID(db, info.NodeID) + require.NoError(t, err) + require.Equal(t, info, res) + }) + + t.Run("update marriage id", func(t *testing.T) { + // this would update the marriage ID should fail (needs to be done explicitly with marriage.UpdateID) + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + + err = marriage.Add(db, info) + require.NoError(t, err) + + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id2) + require.NotEqual(t, id1, id2) + + info.ID = id2 + err = marriage.Add(db, info) + require.ErrorIs(t, err, sql.ErrConflict) + require.ErrorContains(t, err, info.NodeID.String()) + }) +} + +func TestAddUniqueConstraints(t *testing.T) { + t.Parallel() + + t.Run("same nodeID can't be married twice", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: 1, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + require.NotEqual(t, id1, id2) + + info.ID = id2 + err = marriage.Add(db, info) + require.ErrorIs(t, err, sql.ErrConflict) + }) + + t.Run("different nodeID, same marriage ATX, different index", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: 1, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + info.ID = id1 + info.NodeID = types.RandomNodeID() + info.MarriageIndex = 2 + err = marriage.Add(db, info) + require.NoError(t, err) + }) + + t.Run("different nodeID, different marriage ATX, same index", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: 1, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + info.NodeID = types.RandomNodeID() + info.ATX = types.RandomATXID() + info.MarriageIndex = 2 + err = marriage.Add(db, info) + require.NoError(t, err) + }) + + t.Run("different nodeID, same marriage ATX, same index", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: 1, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + // different nodeID, same marriageATX with same index should fail + info.NodeID = types.RandomNodeID() + err = marriage.Add(db, info) + require.ErrorIs(t, err, sql.ErrObjectExists) + }) +} + +func TestNodeIDsByID(t *testing.T) { + t.Parallel() + t.Run("invalid ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + ids, err := marriage.NodeIDsByID(db, 101) + require.ErrorIs(t, err, sql.ErrNotFound) + require.Empty(t, ids) + }) + + t.Run("valid ID", func(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + nodeIDs := make([]types.NodeID, 3) + info := marriage.Info{ + ATX: types.RandomATXID(), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + for i := range nodeIDs { + nodeIDs[i] = types.RandomNodeID() + err = marriage.Add(db, marriage.Info{ + ID: id1, + NodeID: nodeIDs[i], + ATX: info.ATX, + MarriageIndex: i, + Target: info.Target, + Signature: info.Signature, + }) + require.NoError(t, err) + } + + res, err := marriage.NodeIDsByID(db, id1) + require.NoError(t, err) + require.ElementsMatch(t, nodeIDs, res) + + // NewID should return a different ID + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id2) + require.NotEqual(t, id1, id2) + + nodeIDs, err = marriage.NodeIDsByID(db, id2) + require.ErrorIs(t, err, sql.ErrNotFound) + require.Empty(t, nodeIDs) + }) +} + +func TestIterateOps(t *testing.T) { + t.Parallel() + db := statesql.InMemoryTest(t) + + id1, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id1) + + // add 2 sets of 5 identities each + infos := make([]marriage.Info, 0, 10) + for i := range 5 { + info := marriage.Info{ + ID: id1, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: i, + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + infos = append(infos, info) + } + + id2, err := marriage.NewID(db) + require.NoError(t, err) + require.NotZero(t, id2) + require.NotEqual(t, id1, id2) + + for range 5 { + info := marriage.Info{ + ID: id2, + NodeID: types.RandomNodeID(), + ATX: types.RandomATXID(), + MarriageIndex: rand.N(256), + Target: types.RandomNodeID(), + Signature: types.RandomEdSignature(), + } + err = marriage.Add(db, info) + require.NoError(t, err) + + infos = append(infos, info) + } + + // iterate all 10 + res := make([]marriage.Info, 0, 10) + marriage.IterateOps(db, builder.Operations{}, func(info marriage.Info) bool { + res = append(res, info) + return true + }) + require.ElementsMatch(t, infos, res) + + // iterate only the first marriage + res = make([]marriage.Info, 0, 5) + operations := builder.Operations{ + Filter: []builder.Op{ + {Field: builder.Id, Token: builder.Eq, Value: int64(id1)}, + }, + } + marriage.IterateOps(db, operations, func(info marriage.Info) bool { + res = append(res, info) + return true + }) + require.ElementsMatch(t, infos[:5], res) +} diff --git a/sql/migrations.go b/sql/migrations.go index 5f4bc2c26f..92d1a1d516 100644 --- a/sql/migrations.go +++ b/sql/migrations.go @@ -1,6 +1,8 @@ package sql import ( + "bufio" + "bytes" "fmt" "io/fs" "regexp" @@ -58,15 +60,24 @@ func (m *sqlMigration) Apply(db Executor, logger *zap.Logger) error { } // TODO: use more advanced approach to split the SQL script // into commands - for _, cmd := range strings.Split(m.content, ";") { - cmd = sqlCommentRx.ReplaceAllString(cmd, "") - if strings.TrimSpace(cmd) != "" { - if _, err := db.Exec(cmd, nil, nil); err != nil { - return fmt.Errorf("exec %s: %w", cmd, err) + scanner := bufio.NewScanner(strings.NewReader(m.content)) + scanner.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) { + if i := bytes.Index(data, []byte(";")); i >= 0 { + if !bytes.Contains(data[:i], []byte("BEGIN")) { + return i + 1, sqlCommentRx.ReplaceAll(data[:i+1], []byte{}), nil } } - } + if i := bytes.Index(data, []byte("END;")); i >= 0 { + return i + 4, data[:i+4], nil + } + return 0, nil, nil + }) + for scanner.Scan() { + if _, err := db.Exec(scanner.Text(), nil, nil); err != nil { + return fmt.Errorf("exec %s: %w", scanner.Text(), err) + } + } return nil } diff --git a/sql/schema.go b/sql/schema.go index f3e38a1eea..20a949b324 100644 --- a/sql/schema.go +++ b/sql/schema.go @@ -31,15 +31,18 @@ func LoadDBSchemaScript(db Executor) (string, error) { return "", err } fmt.Fprintf(&sb, "PRAGMA user_version = %d;\n", version) - if _, err = db.Exec( - // Type is either 'index' or 'table', we want tables to go first - `select tbl_name, sql || ';' from sqlite_master - where sql is not null - order by tbl_name, type desc, name`, - nil, func(st *Statement) bool { - fmt.Fprintln(&sb, st.ColumnText(1)) - return true - }); err != nil { + if _, err = db.Exec(` + SELECT tbl_name, sql || ';' + FROM sqlite_master + WHERE sql IS NOT NULL AND tbl_name NOT LIKE 'sqlite_%' + ORDER BY + CASE WHEN type = 'table' THEN 1 ELSE 2 END, -- ensures tables are first + tbl_name, -- tables are sorted by name, then all other objects + name -- (indexes, triggers, etc.) also by name + `, nil, func(st *Statement) bool { + fmt.Fprintln(&sb, st.ColumnText(1)) + return true + }); err != nil { return "", fmt.Errorf("error retrieving DB schema: %w", err) } // On Windows, the result contains extra carriage returns @@ -86,7 +89,12 @@ func (s *Schema) Apply(db Database) error { scanner := bufio.NewScanner(strings.NewReader(s.Script)) scanner.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) { if i := bytes.Index(data, []byte(";")); i >= 0 { - return i + 1, data[0 : i+1], nil + if !bytes.Contains(data[:i], []byte("BEGIN")) { + return i + 1, data[:i+1], nil + } + } + if i := bytes.Index(data, []byte("END;")); i >= 0 { + return i + 4, data[:i+4], nil } return 0, nil, nil }) @@ -251,7 +259,8 @@ func (g *SchemaGen) Generate(outputFile string) error { WithLogger(g.logger), WithDatabaseSchema(g.schema), WithForceMigrations(true), - WithNoCheckSchemaDrift()) + WithNoCheckSchemaDrift(), + ) if err != nil { return fmt.Errorf("error opening in-memory db: %w", err) } diff --git a/sql/statesql/schema/migrations/0023_posts_has_publish_epoch.sql b/sql/statesql/schema/migrations/0023_posts_has_publish_epoch.sql index bffbb1ca20..7e4a13293e 100644 --- a/sql/statesql/schema/migrations/0023_posts_has_publish_epoch.sql +++ b/sql/statesql/schema/migrations/0023_posts_has_publish_epoch.sql @@ -8,5 +8,4 @@ SET publish_epoch = ( WHERE atxs.id = posts.atxid ); - CREATE INDEX posts_by_atxid_by_pubkey_epoch ON posts (pubkey, publish_epoch); diff --git a/sql/statesql/schema/migrations/0024_malfeasance.sql b/sql/statesql/schema/migrations/0024_malfeasance.sql new file mode 100644 index 0000000000..0b23628597 --- /dev/null +++ b/sql/statesql/schema/migrations/0024_malfeasance.sql @@ -0,0 +1,69 @@ +CREATE TABLE marriages +( + pubkey CHAR(32) PRIMARY KEY, -- pubkey of the identity in the marriage set + id INT NOT NULL, -- id of the marriage set + marriage_atx CHAR(32) NOT NULL, -- marriage atx of the identity (can differ within set because of double marriage) + marriage_idx INT NOT NULL, -- index of the identity in the marriage set + marriage_target CHAR(32) NOT NULL, -- target of the marriage certificate (pubkey of identity that signed marriage atx) + marriage_sig BLOB NOT NULL, -- proof of the identity in the marriage set + + UNIQUE (marriage_atx, marriage_idx) -- every index is unique per marriage atx +); + +CREATE INDEX marriages_by_id ON marriages (id); + +-- adds new table for v2 malfeasance proofs +CREATE TABLE malfeasance +( + pubkey CHAR(32) PRIMARY KEY, -- pubkey of identity that was proven to be malicious + marriage_id INT, -- id of the marriage set that the identity is part of (or NULL if none) + received INT NOT NULL, -- unix timestamp of when the proof was received/detected + + -- values below are set least once per marriage_id + domain INT, -- domain of the proof + proof BLOB -- proof of the identity to be malicious +); + +-- ensure inserting or updating entries in malfeasance_marriages table references an existing marriage +CREATE TRIGGER malfeasance_check_marriage_id_exists +BEFORE INSERT ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NOT NULL +BEGIN + SELECT RAISE(ABORT, 'marriage_id does not exist in marriages table') + WHERE NOT EXISTS (SELECT 1 FROM marriages WHERE id = NEW.marriage_id); +END; + +CREATE TRIGGER malfeasance_check_marriage_id_update_exists +BEFORE UPDATE ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NOT NULL +BEGIN + SELECT RAISE(ABORT, 'marriage_id does not exist in marriages table') + WHERE NOT EXISTS (SELECT 1 FROM marriages WHERE id = NEW.marriage_id); +END; + +-- ensure an entry in malfeasance table without a marriage_id has a proof +CREATE TRIGGER malfeasance_check_proof_exists +BEFORE INSERT ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NULL +BEGIN + SELECT RAISE(ABORT, 'proof must be provided for malfeasance entry without marriage_id') + WHERE NEW.proof IS NULL OR NEW.domain IS NULL; +END; + +ALTER TABLE identities RENAME TO identities_old; + +CREATE TABLE identities +( + pubkey CHAR(32) PRIMARY KEY, + proof BLOB NOT NULL, + received INT NOT NULL +); + +INSERT INTO identities (pubkey, proof, received) +SELECT pubkey, proof, received +FROM identities_old; + +DROP TABLE identities_old; diff --git a/sql/statesql/schema/schema.sql b/sql/statesql/schema/schema.sql index cf71312a53..c1cd6a427a 100755 --- a/sql/statesql/schema/schema.sql +++ b/sql/statesql/schema/schema.sql @@ -1,4 +1,4 @@ -PRAGMA user_version = 23; +PRAGMA user_version = 24; CREATE TABLE accounts ( address CHAR(24), @@ -9,19 +9,16 @@ CREATE TABLE accounts state BLOB, PRIMARY KEY (address, layer_updated DESC) ); -CREATE INDEX accounts_by_layer_updated ON accounts (layer_updated); CREATE TABLE activesets ( id CHAR(32) PRIMARY KEY, active_set BLOB , epoch INT DEFAULT 0 NOT NULL) WITHOUT ROWID; -CREATE INDEX activesets_by_epoch ON activesets (epoch asc); CREATE TABLE atx_blobs ( id CHAR(32), atx BLOB , version INTEGER); -CREATE UNIQUE INDEX atx_blobs_id ON atx_blobs (id); CREATE TABLE atxs ( id CHAR(32), @@ -37,12 +34,6 @@ CREATE TABLE atxs received INT NOT NULL, validity INTEGER DEFAULT false , marriage_atx CHAR(32), weight INTEGER); -CREATE INDEX atxs_by_coinbase ON atxs (coinbase); -CREATE INDEX atxs_by_epoch_by_pubkey ON atxs (epoch, pubkey); -CREATE INDEX atxs_by_epoch_by_pubkey_nonce ON atxs (pubkey, epoch desc, nonce) WHERE nonce IS NOT NULL; -CREATE INDEX atxs_by_epoch_id on atxs (epoch, id); -CREATE INDEX atxs_by_pubkey_by_epoch_desc ON atxs (pubkey, epoch desc); -CREATE UNIQUE INDEX atxs_id ON atxs (id); CREATE TABLE ballots ( id CHAR(20) PRIMARY KEY, @@ -51,8 +42,6 @@ CREATE TABLE ballots pubkey VARCHAR, ballot BLOB ); -CREATE INDEX ballots_by_atx_by_layer ON ballots (atx, layer asc); -CREATE INDEX ballots_by_layer_by_pubkey ON ballots (layer asc, pubkey); CREATE TABLE beacons ( epoch INT NOT NULL PRIMARY KEY, @@ -72,7 +61,6 @@ CREATE TABLE blocks validity SMALL INT, block BLOB ); -CREATE INDEX blocks_by_layer ON blocks (layer, id asc); CREATE TABLE certificates ( layer INT NOT NULL, @@ -83,9 +71,10 @@ CREATE TABLE certificates ); CREATE TABLE identities ( - pubkey VARCHAR PRIMARY KEY, - proof BLOB -, received INT DEFAULT 0 NOT NULL, marriage_atx CHAR(32), marriage_idx INTEGER, marriage_target CHAR(32), marriage_signature CHAR(64)) WITHOUT ROWID; + pubkey CHAR(32) PRIMARY KEY, + proof BLOB NOT NULL, + received INT NOT NULL +); CREATE TABLE layers ( id INT PRIMARY KEY DESC, @@ -95,7 +84,27 @@ CREATE TABLE layers state_hash CHAR(32), aggregated_hash CHAR(32) ) WITHOUT ROWID; -CREATE INDEX layers_by_processed ON layers (processed); +CREATE TABLE malfeasance +( + pubkey CHAR(32) PRIMARY KEY, + marriage_id INT, + received INT NOT NULL, + + + domain INT, + proof BLOB +); +CREATE TABLE marriages +( + pubkey CHAR(32) PRIMARY KEY, + id INT NOT NULL, + marriage_atx CHAR(32) NOT NULL, + marriage_idx INT NOT NULL, + marriage_target CHAR(32) NOT NULL, + marriage_sig BLOB NOT NULL, + + UNIQUE (marriage_atx, marriage_idx) +); CREATE TABLE poets ( ref VARCHAR PRIMARY KEY, @@ -103,7 +112,6 @@ CREATE TABLE poets service_id VARCHAR, round_id VARCHAR ); -CREATE INDEX poets_by_service_id_by_round_id ON poets (service_id, round_id); CREATE TABLE posts ( atxid CHAR(32) NOT NULL, pubkey CHAR(32) NOT NULL, @@ -111,9 +119,6 @@ CREATE TABLE posts ( prev_atx_index INT, units INT NOT NULL , publish_epoch UNSIGNED INT); -CREATE UNIQUE INDEX posts_by_atxid_by_pubkey ON posts (atxid, pubkey); -CREATE INDEX posts_by_atxid_by_pubkey_epoch ON posts (pubkey, publish_epoch); -CREATE INDEX posts_by_atxid_by_pubkey_prev_atxid ON posts (atxid, pubkey, prev_atxid); CREATE TABLE proposal_transactions ( tid CHAR(32), @@ -135,8 +140,6 @@ CREATE TABLE rewards layer_reward UNSIGNED LONG INT, PRIMARY KEY (pubkey, layer) ); -CREATE INDEX rewards_by_coinbase ON rewards (coinbase, layer); -CREATE INDEX rewards_by_layer ON rewards (layer asc); CREATE TABLE transactions ( id CHAR(32) PRIMARY KEY, @@ -149,12 +152,56 @@ CREATE TABLE transactions nonce BLOB, timestamp INT NOT NULL ) WITHOUT ROWID; -CREATE INDEX transaction_by_layer_principal ON transactions (layer asc, principal); -CREATE INDEX transaction_by_principal_nonce ON transactions (principal, nonce); CREATE TABLE transactions_results_addresses ( address CHAR(24), tid CHAR(32), PRIMARY KEY (tid, address) ) WITHOUT ROWID; +CREATE INDEX accounts_by_layer_updated ON accounts (layer_updated); +CREATE INDEX activesets_by_epoch ON activesets (epoch asc); +CREATE UNIQUE INDEX atx_blobs_id ON atx_blobs (id); +CREATE INDEX atxs_by_coinbase ON atxs (coinbase); +CREATE INDEX atxs_by_epoch_by_pubkey ON atxs (epoch, pubkey); +CREATE INDEX atxs_by_epoch_by_pubkey_nonce ON atxs (pubkey, epoch desc, nonce) WHERE nonce IS NOT NULL; +CREATE INDEX atxs_by_epoch_id on atxs (epoch, id); +CREATE INDEX atxs_by_pubkey_by_epoch_desc ON atxs (pubkey, epoch desc); +CREATE UNIQUE INDEX atxs_id ON atxs (id); +CREATE INDEX ballots_by_atx_by_layer ON ballots (atx, layer asc); +CREATE INDEX ballots_by_layer_by_pubkey ON ballots (layer asc, pubkey); +CREATE INDEX blocks_by_layer ON blocks (layer, id asc); +CREATE INDEX layers_by_processed ON layers (processed); +CREATE TRIGGER malfeasance_check_marriage_id_exists +BEFORE INSERT ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NOT NULL +BEGIN + SELECT RAISE(ABORT, 'marriage_id does not exist in marriages table') + WHERE NOT EXISTS (SELECT 1 FROM marriages WHERE id = NEW.marriage_id); +END; +CREATE TRIGGER malfeasance_check_marriage_id_update_exists +BEFORE UPDATE ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NOT NULL +BEGIN + SELECT RAISE(ABORT, 'marriage_id does not exist in marriages table') + WHERE NOT EXISTS (SELECT 1 FROM marriages WHERE id = NEW.marriage_id); +END; +CREATE TRIGGER malfeasance_check_proof_exists +BEFORE INSERT ON malfeasance +FOR EACH ROW +WHEN NEW.marriage_id IS NULL +BEGIN + SELECT RAISE(ABORT, 'proof must be provided for malfeasance entry without marriage_id') + WHERE NEW.proof IS NULL OR NEW.domain IS NULL; +END; +CREATE INDEX marriages_by_id ON marriages (id); +CREATE INDEX poets_by_service_id_by_round_id ON poets (service_id, round_id); +CREATE UNIQUE INDEX posts_by_atxid_by_pubkey ON posts (atxid, pubkey); +CREATE INDEX posts_by_atxid_by_pubkey_epoch ON posts (pubkey, publish_epoch); +CREATE INDEX posts_by_atxid_by_pubkey_prev_atxid ON posts (atxid, pubkey, prev_atxid); +CREATE INDEX rewards_by_coinbase ON rewards (coinbase, layer); +CREATE INDEX rewards_by_layer ON rewards (layer asc); +CREATE INDEX transaction_by_layer_principal ON transactions (layer asc, principal); +CREATE INDEX transaction_by_principal_nonce ON transactions (principal, nonce); CREATE INDEX transactions_results_addresses_by_address ON transactions_results_addresses(address); From a5c856c33332aa275d303cc8f8dca29fe99d28e3 Mon Sep 17 00:00:00 2001 From: acud <12988138+acud@users.noreply.github.com> Date: Mon, 14 Oct 2024 22:24:37 +0000 Subject: [PATCH 36/73] chore: fix standalone mode (#6385) ## Motivation Fix standalone mode. --- config/presets/standalone.go | 1 + 1 file changed, 1 insertion(+) diff --git a/config/presets/standalone.go b/config/presets/standalone.go index 95eb1dbcd7..f810aea227 100644 --- a/config/presets/standalone.go +++ b/config/presets/standalone.go @@ -37,6 +37,7 @@ func standalone() config.Config { conf.Sync.Interval = 3 * time.Second conf.LayersPerEpoch = 10 + conf.HARE3.Enable = true conf.HARE3.PreroundDelay = 1 * time.Second conf.HARE3.RoundDuration = 100 * time.Millisecond From 378063b0b63958d87561bd339a5dcf2e5b2b5b58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20R=C3=B3=C5=BCa=C5=84ski?= Date: Mon, 14 Oct 2024 15:35:57 +0200 Subject: [PATCH 37/73] review feedback --- activation/activation.go | 6 ++-- activation/activation_multi_test.go | 2 +- activation/atx_service_db.go | 8 +---- activation/atx_service_db_test.go | 6 ++-- sql/localsql/{atxs => localatxs}/atxs.go | 2 +- sql/localsql/localatxs/atxs_test.go | 41 ++++++++++++++++++++++++ sql/localsql/schema/schema.sql | 2 +- 7 files changed, 50 insertions(+), 17 deletions(-) rename sql/localsql/{atxs => localatxs}/atxs.go (98%) create mode 100644 sql/localsql/localatxs/atxs_test.go diff --git a/activation/activation.go b/activation/activation.go index 69222bced6..2201c828bd 100644 --- a/activation/activation.go +++ b/activation/activation.go @@ -26,7 +26,7 @@ import ( "github.com/spacemeshos/go-spacemesh/p2p/pubsub" "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" - "github.com/spacemeshos/go-spacemesh/sql/localsql/atxs" + "github.com/spacemeshos/go-spacemesh/sql/localsql/localatxs" "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" ) @@ -731,7 +731,7 @@ func (b *Builder) PublishActivationTx(ctx context.Context, sig *signing.EdSigner case <-b.layerClock.AwaitLayer(challenge.PublishEpoch.FirstLayer()): } - err = atxs.AddBlob(b.localDB, challenge.PublishEpoch, atx.ID(), sig.NodeID(), codec.MustEncode(atx)) + err = localatxs.AddBlob(b.localDB, challenge.PublishEpoch, atx.ID(), sig.NodeID(), codec.MustEncode(atx)) if err != nil { b.logger.Warn("failed to persist built ATX into the local DB - regossiping won't work", zap.Error(err)) } @@ -981,7 +981,7 @@ func (b *Builder) getPositioningAtx( func (b *Builder) Regossip(ctx context.Context, nodeID types.NodeID) error { epoch := b.layerClock.CurrentLayer().GetEpoch() - id, blob, err := atxs.AtxBlob(b.localDB, epoch, nodeID) + id, blob, err := localatxs.AtxBlob(b.localDB, epoch, nodeID) if errors.Is(err, sql.ErrNotFound) { return nil } else if err != nil { diff --git a/activation/activation_multi_test.go b/activation/activation_multi_test.go index 56736a7c51..064dc4a98d 100644 --- a/activation/activation_multi_test.go +++ b/activation/activation_multi_test.go @@ -18,7 +18,7 @@ import ( "github.com/spacemeshos/go-spacemesh/p2p/pubsub" "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" - localatxs "github.com/spacemeshos/go-spacemesh/sql/localsql/atxs" + "github.com/spacemeshos/go-spacemesh/sql/localsql/localatxs" "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" ) diff --git a/activation/atx_service_db.go b/activation/atx_service_db.go index a2cf4fd5fb..26e11ad7ae 100644 --- a/activation/atx_service_db.go +++ b/activation/atx_service_db.go @@ -99,7 +99,7 @@ func (s *dbAtxService) PositioningATX(ctx context.Context, maxPublish types.Epoc // positioning ATX publish epoch must be lower than the publish epoch of built ATX positioningAtxPublished := min(latestPublished, maxPublish) - id, err := findFullyValidHighTickAtx( + return findFullyValidHighTickAtx( ctx, s.atxsdata, positioningAtxPublished, @@ -109,12 +109,6 @@ func (s *dbAtxService) PositioningATX(ctx context.Context, maxPublish types.Epoc VerifyChainOpts.WithTrustedIDs(s.cfg.trusted...), VerifyChainOpts.WithLogger(s.logger), ) - if err != nil { - s.logger.Info("search failed - using golden atx as positioning atx", zap.Error(err)) - id = s.golden - } - - return id, nil } func findFullyValidHighTickAtx( diff --git a/activation/atx_service_db_test.go b/activation/atx_service_db_test.go index f2e916a595..9ed32db65c 100644 --- a/activation/atx_service_db_test.go +++ b/activation/atx_service_db_test.go @@ -73,10 +73,8 @@ func TestGetPositioningAtxPicksAtxWithValidChain(t *testing.T) { require.NoError(t, err) require.Equal(t, vValidAtx.ID(), posAtxID) - // it returns the golden ATX if couldn't find a better one - posAtxID, err = atxSvc.PositioningATX(context.Background(), validAtx.PublishEpoch-1) - require.NoError(t, err) - require.Equal(t, atxSvc.golden, posAtxID) + _, err = atxSvc.PositioningATX(context.Background(), validAtx.PublishEpoch-1) + require.ErrorIs(t, err, ErrNotFound) } func TestFindFullyValidHighTickAtx(t *testing.T) { diff --git a/sql/localsql/atxs/atxs.go b/sql/localsql/localatxs/atxs.go similarity index 98% rename from sql/localsql/atxs/atxs.go rename to sql/localsql/localatxs/atxs.go index 6c0d351d5a..de9eaadee0 100644 --- a/sql/localsql/atxs/atxs.go +++ b/sql/localsql/localatxs/atxs.go @@ -1,4 +1,4 @@ -package atxs +package localatxs import ( "github.com/spacemeshos/go-spacemesh/common/types" diff --git a/sql/localsql/localatxs/atxs_test.go b/sql/localsql/localatxs/atxs_test.go new file mode 100644 index 0000000000..23e77d402e --- /dev/null +++ b/sql/localsql/localatxs/atxs_test.go @@ -0,0 +1,41 @@ +package localatxs_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/localsql" + "github.com/spacemeshos/go-spacemesh/sql/localsql/localatxs" +) + +func Test_Blobs(t *testing.T) { + t.Run("not found", func(t *testing.T) { + db := localsql.InMemoryTest(t) + _, _, err := localatxs.AtxBlob(db, types.EpochID(0), types.NodeID{}) + require.ErrorIs(t, err, sql.ErrNotFound) + }) + t.Run("found", func(t *testing.T) { + db := localsql.InMemoryTest(t) + epoch := types.EpochID(2) + atxid := types.RandomATXID() + nodeID := types.RandomNodeID() + blob := types.RandomBytes(10) + err := localatxs.AddBlob(db, epoch, atxid, nodeID, blob) + require.NoError(t, err) + gotID, gotBlob, err := localatxs.AtxBlob(db, epoch, nodeID) + require.NoError(t, err) + require.Equal(t, atxid, gotID) + require.Equal(t, blob, gotBlob) + + // different ID + _, _, err = localatxs.AtxBlob(db, epoch, types.RandomNodeID()) + require.ErrorIs(t, err, sql.ErrNotFound) + + // different epoch + _, _, err = localatxs.AtxBlob(db, types.EpochID(3), nodeID) + require.ErrorIs(t, err, sql.ErrNotFound) + }) +} diff --git a/sql/localsql/schema/schema.sql b/sql/localsql/schema/schema.sql index 0d920e9cf7..a3a7333b18 100755 --- a/sql/localsql/schema/schema.sql +++ b/sql/localsql/schema/schema.sql @@ -7,7 +7,6 @@ CREATE TABLE atx_blobs atx BLOB, version INTEGER ); -CREATE UNIQUE INDEX atx_blobs_epoch_pubkey ON atx_blobs (epoch, pubkey); CREATE TABLE atx_sync_requests ( epoch INT NOT NULL, @@ -89,4 +88,5 @@ CREATE TABLE prepared_activeset data BLOB NOT NULL, PRIMARY KEY (kind, epoch) ) WITHOUT ROWID; +CREATE UNIQUE INDEX atx_blobs_epoch_pubkey ON atx_blobs (epoch, pubkey); CREATE UNIQUE INDEX idx_poet_certificates ON poet_certificates (node_id, certifier_id); From 901b02fa6dff3509f78e24527380fc9fd8606a95 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:58:22 +0000 Subject: [PATCH 38/73] Fix creating invalid malfeasance proofs (#6387) ## Motivation In rare occasions a node can create a malfeasance proof against a malicious identity that isn't valid. This only happens when the identity is actually malicious, just that the proof that is created cannot be validated by other nodes. --- .gitignore | 2 +- CHANGELOG.md | 16 ++ activation/handler_v1.go | 27 ++- activation/handler_v1_test.go | 75 +++++- checkpoint/recovery.go | 14 +- fetch/handler.go | 2 +- malfeasance/handler.go | 38 ++- malfeasance/handler_test.go | 4 +- mesh/ballotwriter/ballotwriter.go | 3 +- mesh/ballotwriter/ballotwriter_test.go | 27 +-- node/node.go | 2 +- node/node_integrity_test.go | 99 ++++++++ p2p/pubsub/wrapper.go | 2 +- sql/atxs/atxs.go | 2 +- sql/blocks/blocks.go | 2 +- sql/localsql/migrations/schema_test.go | 22 ++ sql/schemagen/main.go | 8 +- sql/statesql/migrations/interfaces.go | 14 ++ sql/statesql/migrations/mocks.go | 81 +++++++ sql/statesql/migrations/schema.go | 7 +- sql/statesql/migrations/schema_test.go | 2 +- .../migrations/state_0025_migration.go | 100 ++++++++ .../migrations/state_0025_migration_test.go | 217 ++++++++++++++++++ .../0017_atxs_prev_id_nonce_placeholder.sql | 2 +- .../migrations/0025_check_malfeasance.sql | 1 + sql/statesql/schema/schema.sql | 2 +- 26 files changed, 703 insertions(+), 68 deletions(-) create mode 100644 node/node_integrity_test.go create mode 100644 sql/localsql/migrations/schema_test.go create mode 100644 sql/statesql/migrations/interfaces.go create mode 100644 sql/statesql/migrations/mocks.go create mode 100644 sql/statesql/migrations/state_0025_migration.go create mode 100644 sql/statesql/migrations/state_0025_migration_test.go create mode 100644 sql/statesql/schema/migrations/0025_check_malfeasance.sql diff --git a/.gitignore b/.gitignore index 6e0d199a8a..27cb917ab8 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,4 @@ database/data vendor/* systest/vendor/* -.run/* \ No newline at end of file +.run/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aa75b9cb5..0464827b45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ See [RELEASE](./RELEASE.md) for workflow instructions. +## UNRELEASED + +### Upgrade information + +### Highlights + +### Features + +### Improvements + +* [#6378](https://github.com/spacemeshos/go-spacemesh/pull/6387) Improved handling of malicious identities. This reduces + the number of DB queries needed during ATX validation. + +* [#6387](https://github.com/spacemeshos/go-spacemesh/pull/6387) Fix an issue were in rare cases invalid proofs for + malicious identities were created. + ## v1.7.4 ### Improvements diff --git a/activation/handler_v1.go b/activation/handler_v1.go index 85cd805685..c96756ba9c 100644 --- a/activation/handler_v1.go +++ b/activation/handler_v1.go @@ -226,6 +226,13 @@ func (h *HandlerV1) syntacticallyValidateDeps( zap.Stringer("atx_id", atx.ID()), zap.Int("index", invalidIdx.Index), ) + malicious, err := identities.IsMalicious(h.cdb, atx.SmesherID) + if err != nil { + return 0, 0, nil, fmt.Errorf("check if smesher is malicious: %w", err) + } + if malicious { + return 0, 0, nil, fmt.Errorf("smesher %s is known malfeasant", atx.SmesherID.ShortString()) + } proof := &mwire.MalfeasanceProof{ Layer: atx.PublishEpoch.FirstLayer(), Proof: mwire.Proof{ @@ -261,10 +268,11 @@ func (h *HandlerV1) validateNonInitialAtx( return err } - needRecheck := atx.VRFNonce != nil || atx.NumUnits > previous.NumUnits - if atx.VRFNonce == nil { - atx.VRFNonce = new(uint64) - *atx.VRFNonce = uint64(previous.VRFNonce) + vrfNonce := atx.VRFNonce + needRecheck := vrfNonce != nil || atx.NumUnits > previous.NumUnits + if vrfNonce == nil { + vrfNonce = new(uint64) + *vrfNonce = uint64(previous.VRFNonce) } if needRecheck { @@ -274,8 +282,13 @@ func (h *HandlerV1) validateNonInitialAtx( zap.Bool("post increased", atx.NumUnits > previous.NumUnits), zap.Stringer("smesher", atx.SmesherID), ) - err := h.nipostValidator. - VRFNonce(atx.SmesherID, commitment, *atx.VRFNonce, atx.NIPost.PostMetadata.LabelsPerUnit, atx.NumUnits) + err := h.nipostValidator.VRFNonce( + atx.SmesherID, + commitment, + *vrfNonce, + atx.NIPost.PostMetadata.LabelsPerUnit, + atx.NumUnits, + ) if err != nil { return fmt.Errorf("invalid vrf nonce: %w", err) } @@ -517,7 +530,7 @@ func (h *HandlerV1) processATX( existing, _ := h.cdb.GetAtx(watx.ID()) if existing != nil { - return nil, fmt.Errorf("%w atx %s", errKnownAtx, watx.ID()) + return nil, fmt.Errorf("%w: %s", errKnownAtx, watx.ID()) } h.logger.Debug("processing atx", diff --git a/activation/handler_v1_test.go b/activation/handler_v1_test.go index 56b9ffb7f1..1f88396407 100644 --- a/activation/handler_v1_test.go +++ b/activation/handler_v1_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/spacemeshos/post/verifying" "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" "go.uber.org/zap/zaptest" @@ -81,6 +82,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.NoError(t, err) return atxHdlr, prevAtx, posAtx } + t.Run("valid atx", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -103,6 +105,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.Equal(t, atx.NumUnits, units) require.Nil(t, proof) }) + t.Run("valid atx with new VRF nonce", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -128,6 +131,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.Equal(t, atx.NumUnits, units) require.Nil(t, proof) }) + t.Run("valid atx with decreasing num units", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -149,6 +153,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.Equal(t, atx.NumUnits, units) require.Nil(t, proof) }) + t.Run("atx with increasing num units, no new VRF, old valid", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -171,6 +176,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.Equal(t, prevAtx.NumUnits, units) require.Nil(t, proof) }) + t.Run("atx with increasing num units, no new VRF, old invalid for new size", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -190,6 +196,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.ErrorContains(t, err, "invalid VRF") require.Nil(t, proof) }) + t.Run("valid initial atx", func(t *testing.T) { t.Parallel() atxHdlr, _, posAtx := setup(t) @@ -216,6 +223,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.Equal(t, atx.NumUnits, units) require.Nil(t, proof) }) + t.Run("atx targeting wrong publish epoch", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -227,6 +235,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.ErrorContains(t, err, "atx publish epoch is too far in the future") }) + t.Run("failing nipost challenge validation", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -244,6 +253,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.EqualError(t, err, "nipost error") require.Nil(t, proof) }) + t.Run("failing positioning atx validation", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -262,6 +272,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.EqualError(t, err, "bad positioning atx") require.Nil(t, proof) }) + t.Run("bad initial nipost challenge", func(t *testing.T) { t.Parallel() atxHdlr, _, posAtx := setup(t) @@ -283,6 +294,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { require.EqualError(t, err, "bad initial nipost") require.Nil(t, proof) }) + t.Run("bad NIPoST", func(t *testing.T) { t.Parallel() atxHdlr, prevATX, postAtx := setup(t) @@ -298,9 +310,55 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { atxHdlr.mValidator.EXPECT(). NIPost(gomock.Any(), atx.SmesherID, goldenATXID, gomock.Any(), gomock.Any(), atx.NumUnits, gomock.Any()). Return(0, errors.New("bad nipost")) - _, _, _, err := atxHdlr.syntacticallyValidateDeps(context.Background(), atx) + _, _, proof, err := atxHdlr.syntacticallyValidateDeps(context.Background(), atx) require.EqualError(t, err, "validating nipost: bad nipost") + require.Nil(t, proof) }) + + t.Run("invalid NIPoST", func(t *testing.T) { + t.Parallel() + atxHdlr, prevATX, postAtx := setup(t) + + atx := newChainedActivationTxV1(t, prevATX, postAtx.ID()) + atx.Sign(sig) + + atxHdlr.mclock.EXPECT().CurrentLayer().Return(atx.PublishEpoch.FirstLayer()) + require.NoError(t, atxHdlr.syntacticallyValidate(context.Background(), atx)) + + atxHdlr.mValidator.EXPECT().NIPostChallengeV1(gomock.Any(), gomock.Any(), atx.SmesherID) + atxHdlr.mValidator.EXPECT().PositioningAtx(atx.PositioningATXID, gomock.Any(), goldenATXID, atx.PublishEpoch) + atxHdlr.mValidator.EXPECT(). + NIPost(gomock.Any(), atx.SmesherID, goldenATXID, gomock.Any(), gomock.Any(), atx.NumUnits, gomock.Any()). + Return(0, &verifying.ErrInvalidIndex{Index: 2}) + atxHdlr.mtortoise.EXPECT().OnMalfeasance(atx.SmesherID) + _, _, proof, err := atxHdlr.syntacticallyValidateDeps(context.Background(), atx) + require.NoError(t, err) + require.NotNil(t, proof) + require.Equal(t, mwire.InvalidPostIndex, proof.Proof.Type) + }) + + t.Run("invalid NIPoST of known malfeasant", func(t *testing.T) { + t.Parallel() + atxHdlr, prevATX, postAtx := setup(t) + + atx := newChainedActivationTxV1(t, prevATX, postAtx.ID()) + atx.Sign(sig) + + require.NoError(t, identities.SetMalicious(atxHdlr.cdb, atx.SmesherID, []byte("proof"), time.Now())) + + atxHdlr.mclock.EXPECT().CurrentLayer().Return(atx.PublishEpoch.FirstLayer()) + require.NoError(t, atxHdlr.syntacticallyValidate(context.Background(), atx)) + + atxHdlr.mValidator.EXPECT().NIPostChallengeV1(gomock.Any(), gomock.Any(), atx.SmesherID) + atxHdlr.mValidator.EXPECT().PositioningAtx(atx.PositioningATXID, gomock.Any(), goldenATXID, atx.PublishEpoch) + atxHdlr.mValidator.EXPECT(). + NIPost(gomock.Any(), atx.SmesherID, goldenATXID, gomock.Any(), gomock.Any(), atx.NumUnits, gomock.Any()). + Return(0, &verifying.ErrInvalidIndex{Index: 2}) + _, _, proof, err := atxHdlr.syntacticallyValidateDeps(context.Background(), atx) + require.EqualError(t, err, fmt.Sprintf("smesher %s is known malfeasant", atx.SmesherID.ShortString())) + require.Nil(t, proof) + }) + t.Run("missing NodeID in initial atx", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -313,6 +371,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.ErrorContains(t, err, "node id is missing") }) + t.Run("missing VRF nonce in initial atx", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -325,6 +384,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.ErrorContains(t, err, "vrf nonce is missing") }) + t.Run("invalid VRF nonce in initial atx", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -339,6 +399,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.ErrorContains(t, err, "invalid VRF nonce") }) + t.Run("prevAtx not declared but initial Post not included", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -351,6 +412,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "no prev atx declared, but initial post is not included") }) + t.Run("prevAtx not declared but commitment ATX is not included", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -363,6 +425,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "no prev atx declared, but commitment atx is missing") }) + t.Run("prevAtx not declared but commitment ATX is empty", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -375,6 +438,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "empty commitment atx") }) + t.Run("prevAtx not declared but sequence not zero", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -387,6 +451,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "no prev atx declared, but sequence number not zero") }) + t.Run("prevAtx not declared but validation of initial post fails", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -403,6 +468,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.ErrorContains(t, err, "failed post validation") }) + t.Run("empty positioning ATX", func(t *testing.T) { t.Parallel() atxHdlr, _, _ := setup(t) @@ -415,6 +481,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "empty positioning atx") }) + t.Run("prevAtx declared but initial Post is included", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, _ := setup(t) @@ -427,6 +494,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "prev atx declared, but initial post is included") }) + t.Run("prevAtx declared but NodeID is included", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -439,6 +507,7 @@ func TestHandlerV1_SyntacticallyValidateAtx(t *testing.T) { err := atxHdlr.syntacticallyValidate(context.Background(), atx) require.EqualError(t, err, "prev atx declared, but node id is included") }) + t.Run("prevAtx declared but commitmentATX is included", func(t *testing.T) { t.Parallel() atxHdlr, prevAtx, posAtx := setup(t) @@ -716,6 +785,7 @@ func TestHandlerV1_StoreAtx(t *testing.T) { func TestHandlerV1_RegistersHashesInPeer(t *testing.T) { goldenATXID := types.RandomATXID() peer := p2p.Peer("buddy") + t.Run("registers poet and atxs", func(t *testing.T) { t.Parallel() atxHdlr := newV1TestHandler(t, goldenATXID) @@ -727,6 +797,7 @@ func TestHandlerV1_RegistersHashesInPeer(t *testing.T) { RegisterPeerHashes(peer, gomock.InAnyOrder([]types.Hash32{poet, atxs[0].Hash32(), atxs[1].Hash32()})) atxHdlr.registerHashes(peer, poet, atxs) }) + t.Run("registers poet", func(t *testing.T) { t.Parallel() atxHdlr := newV1TestHandler(t, goldenATXID) @@ -740,6 +811,7 @@ func TestHandlerV1_RegistersHashesInPeer(t *testing.T) { func TestHandlerV1_FetchesReferences(t *testing.T) { goldenATXID := types.RandomATXID() + t.Run("fetch poet and atxs", func(t *testing.T) { t.Parallel() atxHdlr := newV1TestHandler(t, goldenATXID) @@ -776,6 +848,7 @@ func TestHandlerV1_FetchesReferences(t *testing.T) { atxHdlr.mockFetch.EXPECT().GetAtxs(gomock.Any(), atxs, gomock.Any()).Return(errors.New("oh")) require.Error(t, atxHdlr.fetchReferences(context.Background(), poet, atxs)) }) + t.Run("reject ATX when dependency ATX is rejected", func(t *testing.T) { t.Parallel() atxHdlr := newV1TestHandler(t, goldenATXID) diff --git a/checkpoint/recovery.go b/checkpoint/recovery.go index aeb1a51c7b..7fb0cb775d 100644 --- a/checkpoint/recovery.go +++ b/checkpoint/recovery.go @@ -24,14 +24,12 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/atxs" "github.com/spacemeshos/go-spacemesh/sql/atxsync" "github.com/spacemeshos/go-spacemesh/sql/localsql" - localmigrations "github.com/spacemeshos/go-spacemesh/sql/localsql/migrations" "github.com/spacemeshos/go-spacemesh/sql/localsql/nipost" "github.com/spacemeshos/go-spacemesh/sql/malsync" "github.com/spacemeshos/go-spacemesh/sql/marriage" "github.com/spacemeshos/go-spacemesh/sql/poets" "github.com/spacemeshos/go-spacemesh/sql/recovery" "github.com/spacemeshos/go-spacemesh/sql/statesql" - statemigrations "github.com/spacemeshos/go-spacemesh/sql/statesql/migrations" ) const recoveryDir = "recovery" @@ -123,25 +121,17 @@ func Recover( return nil, errors.New("restore layer not set") } logger.Info("recovering from checkpoint", zap.String("url", cfg.Uri), zap.Stringer("restore", cfg.Restore)) - schema, err := statemigrations.SchemaWithInCodeMigrations() - if err != nil { - return nil, fmt.Errorf("error loading db schema: %w", err) - } db, err := statesql.Open( "file:"+cfg.DbPath(), - sql.WithDatabaseSchema(schema), + sql.WithMigrationsDisabled(), ) if err != nil { return nil, fmt.Errorf("open old database: %w", err) } defer db.Close() - lSchema, err := localmigrations.SchemaWithInCodeMigrations() - if err != nil { - return nil, fmt.Errorf("get schema with in-code migrations: %w", err) - } localDB, err := localsql.Open( "file:"+filepath.Join(cfg.DataDir, cfg.LocalDbFile), - sql.WithDatabaseSchema(lSchema), + sql.WithMigrationsDisabled(), ) if err != nil { return nil, fmt.Errorf("open old local database: %w", err) diff --git a/fetch/handler.go b/fetch/handler.go index 411480ee44..371377cc50 100644 --- a/fetch/handler.go +++ b/fetch/handler.go @@ -339,7 +339,7 @@ func (h *handler) doHandleHashReqStream( ) error { var requestBatch RequestBatch if err := codec.Decode(msg, &requestBatch); err != nil { - return fmt.Errorf("%w: decooding request: %w", errBadRequest, err) + return fmt.Errorf("%w: decoding request: %w", errBadRequest, err) } if hint != datastore.NoHint && len(requestBatch.Requests) > 1 { diff --git a/malfeasance/handler.go b/malfeasance/handler.go index 5d4eea62a9..a6e1d0f847 100644 --- a/malfeasance/handler.go +++ b/malfeasance/handler.go @@ -23,11 +23,11 @@ import ( ) var ( - ErrKnownProof = errors.New("known proof") - + errKnownProof = errors.New("known proof") errMalformedData = fmt.Errorf("%w: malformed data", pubsub.ErrValidationReject) errWrongHash = fmt.Errorf("%w: incorrect hash", pubsub.ErrValidationReject) errUnknownProof = fmt.Errorf("%w: unknown proof type", pubsub.ErrValidationReject) + errInvalidProof = fmt.Errorf("%w: invalid proof", pubsub.ErrValidationReject) ) type MalfeasanceType byte @@ -115,7 +115,7 @@ func (h *Handler) Info(data []byte) (map[string]string, error) { func (h *Handler) HandleSyncedMalfeasanceProof( ctx context.Context, expHash types.Hash32, - _ p2p.Peer, + peer p2p.Peer, data []byte, ) error { var p wire.MalfeasanceProof @@ -126,6 +126,14 @@ func (h *Handler) HandleSyncedMalfeasanceProof( } nodeID, err := h.validateAndSave(ctx, &p) if err == nil && types.Hash32(nodeID) != expHash { + // we log & return because libp2p will ignore the message if we return an error, + // but only log "validation ignored" instead of the error we return + h.logger.Warn("malfeasance proof for wrong identity", + log.ZContext(ctx), + log.ZShortStringer("expected", expHash), + log.ZShortStringer("got", nodeID), + zap.Stringer("peer", peer), + ) return fmt.Errorf( "%w: malfeasance proof want %s, got %s", errWrongHash, @@ -133,6 +141,9 @@ func (h *Handler) HandleSyncedMalfeasanceProof( nodeID.ShortString(), ) } + if errors.Is(err, errKnownProof) { + return nil + } return err } @@ -151,8 +162,13 @@ func (h *Handler) HandleMalfeasanceProof(ctx context.Context, peer p2p.Peer, dat if peer == h.self { id, err := h.Validate(ctx, &p.MalfeasanceProof) if err != nil { + h.logger.Warn("malfeasance proof failed validation during publish", + log.ZContext(ctx), + zap.Inline(&p.MalfeasanceProof), + zap.Error(err), + ) h.countInvalidProof(&p.MalfeasanceProof) - return err + return fmt.Errorf("%w: %s", pubsub.ErrValidationReject, err) } h.reportMalfeasance(id, codec.MustEncode(&p.MalfeasanceProof)) // node saves malfeasance proof eagerly/atomically with the malicious data. @@ -161,6 +177,9 @@ func (h *Handler) HandleMalfeasanceProof(ctx context.Context, peer p2p.Peer, dat return nil } _, err := h.validateAndSave(ctx, &p.MalfeasanceProof) + if errors.Is(err, errKnownProof) { + return nil + } return err } @@ -183,14 +202,14 @@ func (h *Handler) validateAndSave(ctx context.Context, p *wire.MalfeasanceProof) } if malicious { h.logger.Debug("known malicious identity", log.ZContext(ctx), zap.Stringer("smesher", nodeID)) - return ErrKnownProof + return errKnownProof } if err := identities.SetMalicious(dbtx, nodeID, proofBytes, time.Now()); err != nil { return fmt.Errorf("add malfeasance proof: %w", err) } return nil }); err != nil { - if !errors.Is(err, ErrKnownProof) { + if !errors.Is(err, errKnownProof) { h.logger.Error("failed to save MalfeasanceProof", log.ZContext(ctx), zap.Stringer("smesher", nodeID), @@ -221,10 +240,5 @@ func (h *Handler) Validate(ctx context.Context, p *wire.MalfeasanceProof) (types if err == nil { return nodeID, nil } - h.logger.Debug("malfeasance proof failed validation", - log.ZContext(ctx), - zap.Inline(p), - zap.Error(err), - ) - return nodeID, err + return nodeID, fmt.Errorf("%w: %v", errInvalidProof, err) } diff --git a/malfeasance/handler_test.go b/malfeasance/handler_test.go index f594138f93..9c45a4879c 100644 --- a/malfeasance/handler_test.go +++ b/malfeasance/handler_test.go @@ -185,7 +185,7 @@ func TestHandler_HandleMalfeasanceProof(t *testing.T) { } err := h.HandleMalfeasanceProof(context.Background(), "peer", codec.MustEncode(gossip)) - require.ErrorIs(t, ErrKnownProof, err) + require.NoError(t, err) var blob sql.Blob require.NoError(t, identities.LoadMalfeasanceBlob(context.Background(), h.db, nodeID.Bytes(), &blob)) @@ -363,7 +363,7 @@ func TestHandler_HandleSyncedMalfeasanceProof(t *testing.T) { require.NotEqual(t, proofBytes, newProofBytes) err := h.HandleSyncedMalfeasanceProof(context.Background(), types.Hash32(nodeID), "peer", newProofBytes) - require.ErrorIs(t, ErrKnownProof, err) + require.NoError(t, err) var blob sql.Blob require.NoError(t, identities.LoadMalfeasanceBlob(context.Background(), h.db, nodeID.Bytes(), &blob)) diff --git a/mesh/ballotwriter/ballotwriter.go b/mesh/ballotwriter/ballotwriter.go index 1252be9cfc..35cb2ec43c 100644 --- a/mesh/ballotwriter/ballotwriter.go +++ b/mesh/ballotwriter/ballotwriter.go @@ -165,6 +165,7 @@ type batchResult struct { } type db interface { - WithTx(context.Context, func(sql.Transaction) error) error sql.Executor + + WithTx(context.Context, func(sql.Transaction) error) error } diff --git a/mesh/ballotwriter/ballotwriter_test.go b/mesh/ballotwriter/ballotwriter_test.go index aeb742c68d..b9a19880a3 100644 --- a/mesh/ballotwriter/ballotwriter_test.go +++ b/mesh/ballotwriter/ballotwriter_test.go @@ -20,7 +20,6 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/ballots" "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/statesql" - "github.com/spacemeshos/go-spacemesh/sql/statesql/migrations" ) func init() { @@ -75,8 +74,8 @@ func TestWriteCoalesce_OnePerSmesher(t *testing.T) { require.NotNil(t, blob.Bytes) } -func BenchmarkWriteCoalesing(b *testing.B) { - a := make([]*types.Ballot, 100000) +func BenchmarkWriteCoalescing(b *testing.B) { + a := make([]*types.Ballot, 1000000) for i := 0; i < len(a); i++ { a[i] = genBallot(b) } @@ -119,7 +118,8 @@ func BenchmarkWriteCoalesing(b *testing.B) { return nil } b.ResetTimer() - b.Run("No Coalesing", func(b *testing.B) { + + b.Run("No Coalescing", func(b *testing.B) { db := newDiskSqlite(b) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -134,13 +134,10 @@ func BenchmarkWriteCoalesing(b *testing.B) { } }) - // with the coalesing tests, one must take the "ns/op" metrics and divide it - // by the number of entries written together to see how many items we're doing - // per time unit. - b.Run("Coalesing 1000 entries", func(b *testing.B) { + b.Run("Coalescing 1000 entries", func(b *testing.B) { db := newDiskSqlite(b) b.ResetTimer() - for j := 0; j < b.N; j++ { + for j := 0; j < b.N/1000; j++ { if err := db.WithTx(context.Background(), func(tx sql.Transaction) error { var err error for i := (j * 1000); i < (j*1000)+1000; i++ { @@ -155,10 +152,10 @@ func BenchmarkWriteCoalesing(b *testing.B) { } }) - b.Run("Coalesing 5000 entries", func(b *testing.B) { + b.Run("Coalescing 5000 entries", func(b *testing.B) { db := newDiskSqlite(b) b.ResetTimer() - for j := 0; j < b.N; j++ { + for j := 0; j < b.N/5000; j++ { if err := db.WithTx(context.Background(), func(tx sql.Transaction) error { var err error for i := (j * 5000); i < (j*5000)+5000; i++ { @@ -206,15 +203,9 @@ func newTestBallotWriter(t testing.TB) (*ballotwriter.BallotWriter, sql.Database func newDiskSqlite(tb testing.TB) sql.Database { tb.Helper() - schema, err := migrations.SchemaWithInCodeMigrations() - require.NoError(tb, err) - dbopts := []sql.Opt{ - sql.WithDatabaseSchema(schema), - sql.WithForceMigrations(true), - } dir := tb.TempDir() - sqlDB, err := sql.Open("file:"+filepath.Join(dir, "sql.sql"), dbopts...) + sqlDB, err := statesql.Open("file:" + filepath.Join(dir, "state.sql")) if err != nil { tb.Fatal(err) } diff --git a/node/node.go b/node/node.go index 0690bcf9e6..44ad9db4c0 100644 --- a/node/node.go +++ b/node/node.go @@ -1954,7 +1954,7 @@ func (app *App) setupDBs(ctx context.Context, lg log.Log) error { return fmt.Errorf("failed to create %s: %w", dbPath, err) } dbLog := app.addLogger(StateDbLogger, lg).Zap() - schema, err := statemigrations.SchemaWithInCodeMigrations() + schema, err := statemigrations.SchemaWithInCodeMigrations(app.malfeasanceHandler) if err != nil { return fmt.Errorf("error loading db schema: %w", err) } diff --git a/node/node_integrity_test.go b/node/node_integrity_test.go new file mode 100644 index 0000000000..79a3a2017a --- /dev/null +++ b/node/node_integrity_test.go @@ -0,0 +1,99 @@ +package node + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "go.uber.org/zap/zaptest" + + "github.com/spacemeshos/go-spacemesh/activation" + "github.com/spacemeshos/go-spacemesh/codec" + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/config" + "github.com/spacemeshos/go-spacemesh/datastore" + "github.com/spacemeshos/go-spacemesh/hare3" + "github.com/spacemeshos/go-spacemesh/malfeasance" + "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/mesh" + "github.com/spacemeshos/go-spacemesh/signing" + "github.com/spacemeshos/go-spacemesh/sql/builder" + "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/statesql" +) + +func TestCheckDBValidity(t *testing.T) { + t.Skip("This test is intended to be run manually to check the validity of malfeasance proofs in the database") + + db, err := statesql.Open("file:state.sql") + require.NoError(t, err) + + logger := zaptest.NewLogger(t) + cfg := config.MainnetConfig() + edVerifier := signing.NewEdVerifier( + signing.WithVerifierPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + postVerifier, err := activation.NewPostVerifier( + cfg.POST, + logger.Named("post_verifier"), + ) + require.NoError(t, err) + + malfeasanceLogger := logger.Named("malfeasance") + activationMH := activation.NewMalfeasanceHandler( + db, + malfeasanceLogger, + edVerifier, + ) + meshMH := mesh.NewMalfeasanceHandler( + db, + edVerifier, + mesh.WithMalfeasanceLogger(malfeasanceLogger), + ) + hareMH := hare3.NewMalfeasanceHandler( + db, + edVerifier, + hare3.WithMalfeasanceLogger(malfeasanceLogger), + ) + invalidPostMH := activation.NewInvalidPostIndexHandler( + db, + edVerifier, + postVerifier, + ) + invalidPrevMH := activation.NewInvalidPrevATXHandler(db, edVerifier) + + nodeIDs := make([]types.NodeID, 0) + + ctrl := gomock.NewController(t) + trtl := malfeasance.NewMocktortoise(ctrl) + handler := malfeasance.NewHandler( + datastore.NewCachedDB(db, logger.Named("cached_db")), + malfeasanceLogger, + "self", + nodeIDs, + trtl, + ) + handler.RegisterHandler(malfeasance.MultipleATXs, activationMH) + handler.RegisterHandler(malfeasance.MultipleBallots, meshMH) + handler.RegisterHandler(malfeasance.HareEquivocation, hareMH) + handler.RegisterHandler(malfeasance.InvalidPostIndex, invalidPostMH) + handler.RegisterHandler(malfeasance.InvalidPrevATX, invalidPrevMH) + + i := 0 + err = identities.IterateOps(db, builder.Operations{}, func(nodeID types.NodeID, bytes []byte, _ time.Time) bool { + proof := &wire.MalfeasanceProof{} + err := codec.Decode(bytes, proof) + require.NoError(t, err) + + id, err := handler.Validate(context.Background(), proof) + require.NoError(t, err) + require.Equal(t, nodeID, id) + + t.Logf("Proof %d is valid for %s\n", i, nodeID.ShortString()) + i++ + return true + }) + require.NoError(t, err) +} diff --git a/p2p/pubsub/wrapper.go b/p2p/pubsub/wrapper.go index 480dad6058..0e52656dea 100644 --- a/p2p/pubsub/wrapper.go +++ b/p2p/pubsub/wrapper.go @@ -105,7 +105,7 @@ func (ps *GossipPubSub) Publish(ctx context.Context, topic string, msg []byte) e ps.logger.Sugar().Panicf("Publish is called before Register for topic %s", topic) } if err := topich.Publish(ctx, msg); err != nil { - return fmt.Errorf("failed to publish to topic %v: %w", topic, err) + return fmt.Errorf("failed to publish to topic %s: %w", topic, err) } return nil } diff --git a/sql/atxs/atxs.go b/sql/atxs/atxs.go index 21b3ed0815..a60707b17e 100644 --- a/sql/atxs/atxs.go +++ b/sql/atxs/atxs.go @@ -83,7 +83,7 @@ func Get(db sql.Executor, id types.ATXID) (*types.ActivationTx, error) { enc := func(stmt *sql.Statement) { stmt.BindBytes(1, id.Bytes()) } - q := fmt.Sprintf("%v where id =?1;", fullQuery) + q := fmt.Sprintf("%s where id =?1;", fullQuery) v, err := load(db, q, enc) if err != nil { return nil, fmt.Errorf("get id %s: %w", id.String(), err) diff --git a/sql/blocks/blocks.go b/sql/blocks/blocks.go index f3f17f43a1..a65120a7f2 100644 --- a/sql/blocks/blocks.go +++ b/sql/blocks/blocks.go @@ -58,7 +58,7 @@ func Has(db sql.Executor, id types.BlockID) (bool, error) { } // GetBlobSizes returns the sizes of the blobs corresponding to blocks with specified -// ids. For non-existent balots, the corresponding items are set to -1. +// ids. For non-existent ballots, the corresponding items are set to -1. func GetBlobSizes(db sql.Executor, ids [][]byte) (sizes []int, err error) { return sql.GetBlobSizes(db, "select id, length(block) from blocks where id in", ids) } diff --git a/sql/localsql/migrations/schema_test.go b/sql/localsql/migrations/schema_test.go new file mode 100644 index 0000000000..c94f2b549c --- /dev/null +++ b/sql/localsql/migrations/schema_test.go @@ -0,0 +1,22 @@ +package migrations + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + + "github.com/spacemeshos/go-spacemesh/sql" +) + +func TestCodedMigrations(t *testing.T) { + schema, err := SchemaWithInCodeMigrations() + require.NoError(t, err) + + db := sql.InMemory( + sql.WithDatabaseSchema(schema), + sql.WithLogger(zaptest.NewLogger(t)), + sql.WithForceMigrations(true), + ) + require.NotNil(t, db) +} diff --git a/sql/schemagen/main.go b/sql/schemagen/main.go index 6838f79046..c55d2b3ad4 100644 --- a/sql/schemagen/main.go +++ b/sql/schemagen/main.go @@ -8,8 +8,8 @@ import ( "go.uber.org/zap/zapcore" "github.com/spacemeshos/go-spacemesh/sql" - localmigrations "github.com/spacemeshos/go-spacemesh/sql/localsql/migrations" - statemigrations "github.com/spacemeshos/go-spacemesh/sql/statesql/migrations" + "github.com/spacemeshos/go-spacemesh/sql/localsql" + "github.com/spacemeshos/go-spacemesh/sql/statesql" ) var ( @@ -32,9 +32,9 @@ func main() { logger := zap.New(core).With(zap.String("dbType", *dbType)) switch *dbType { case "state": - schema, err = statemigrations.SchemaWithInCodeMigrations() + schema, err = statesql.Schema() case "local": - schema, err = localmigrations.SchemaWithInCodeMigrations() + schema, err = localsql.Schema() default: logger.Fatal("unknown database type, must be state or local") } diff --git a/sql/statesql/migrations/interfaces.go b/sql/statesql/migrations/interfaces.go new file mode 100644 index 0000000000..c1580b8582 --- /dev/null +++ b/sql/statesql/migrations/interfaces.go @@ -0,0 +1,14 @@ +package migrations + +import ( + "context" + + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/malfeasance/wire" +) + +//go:generate mockgen -typed -package=migrations -destination=./mocks.go -source=interfaces.go + +type malfeasanceValidator interface { + Validate(ctx context.Context, proof *wire.MalfeasanceProof) (types.NodeID, error) +} diff --git a/sql/statesql/migrations/mocks.go b/sql/statesql/migrations/mocks.go new file mode 100644 index 0000000000..c5924a43f6 --- /dev/null +++ b/sql/statesql/migrations/mocks.go @@ -0,0 +1,81 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: interfaces.go +// +// Generated by this command: +// +// mockgen -typed -package=migrations -destination=./mocks.go -source=interfaces.go +// + +// Package migrations is a generated GoMock package. +package migrations + +import ( + context "context" + reflect "reflect" + + types "github.com/spacemeshos/go-spacemesh/common/types" + wire "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + gomock "go.uber.org/mock/gomock" +) + +// MockmalfeasanceValidator is a mock of malfeasanceValidator interface. +type MockmalfeasanceValidator struct { + ctrl *gomock.Controller + recorder *MockmalfeasanceValidatorMockRecorder +} + +// MockmalfeasanceValidatorMockRecorder is the mock recorder for MockmalfeasanceValidator. +type MockmalfeasanceValidatorMockRecorder struct { + mock *MockmalfeasanceValidator +} + +// NewMockmalfeasanceValidator creates a new mock instance. +func NewMockmalfeasanceValidator(ctrl *gomock.Controller) *MockmalfeasanceValidator { + mock := &MockmalfeasanceValidator{ctrl: ctrl} + mock.recorder = &MockmalfeasanceValidatorMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockmalfeasanceValidator) EXPECT() *MockmalfeasanceValidatorMockRecorder { + return m.recorder +} + +// Validate mocks base method. +func (m *MockmalfeasanceValidator) Validate(ctx context.Context, proof *wire.MalfeasanceProof) (types.NodeID, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Validate", ctx, proof) + ret0, _ := ret[0].(types.NodeID) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Validate indicates an expected call of Validate. +func (mr *MockmalfeasanceValidatorMockRecorder) Validate(ctx, proof any) *MockmalfeasanceValidatorValidateCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validate", reflect.TypeOf((*MockmalfeasanceValidator)(nil).Validate), ctx, proof) + return &MockmalfeasanceValidatorValidateCall{Call: call} +} + +// MockmalfeasanceValidatorValidateCall wrap *gomock.Call +type MockmalfeasanceValidatorValidateCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockmalfeasanceValidatorValidateCall) Return(arg0 types.NodeID, arg1 error) *MockmalfeasanceValidatorValidateCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockmalfeasanceValidatorValidateCall) Do(f func(context.Context, *wire.MalfeasanceProof) (types.NodeID, error)) *MockmalfeasanceValidatorValidateCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockmalfeasanceValidatorValidateCall) DoAndReturn(f func(context.Context, *wire.MalfeasanceProof) (types.NodeID, error)) *MockmalfeasanceValidatorValidateCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/sql/statesql/migrations/schema.go b/sql/statesql/migrations/schema.go index ad4c9cbc01..bf9bf57b56 100644 --- a/sql/statesql/migrations/schema.go +++ b/sql/statesql/migrations/schema.go @@ -5,6 +5,9 @@ import ( "github.com/spacemeshos/go-spacemesh/sql/statesql" ) -func SchemaWithInCodeMigrations() (*sql.Schema, error) { - return statesql.Schema(New0021Migration(1_000_000)) +func SchemaWithInCodeMigrations(malHandler malfeasanceValidator) (*sql.Schema, error) { + return statesql.Schema( + New0021Migration(1_000_000), + New0025Migration(malHandler), + ) } diff --git a/sql/statesql/migrations/schema_test.go b/sql/statesql/migrations/schema_test.go index c94f2b549c..938036b7ff 100644 --- a/sql/statesql/migrations/schema_test.go +++ b/sql/statesql/migrations/schema_test.go @@ -10,7 +10,7 @@ import ( ) func TestCodedMigrations(t *testing.T) { - schema, err := SchemaWithInCodeMigrations() + schema, err := SchemaWithInCodeMigrations(nil) require.NoError(t, err) db := sql.InMemory( diff --git a/sql/statesql/migrations/state_0025_migration.go b/sql/statesql/migrations/state_0025_migration.go new file mode 100644 index 0000000000..6d675981ba --- /dev/null +++ b/sql/statesql/migrations/state_0025_migration.go @@ -0,0 +1,100 @@ +package migrations + +import ( + "context" + "encoding/hex" + "time" + + "go.uber.org/zap" + + "github.com/spacemeshos/go-spacemesh/codec" + "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/log" + "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/builder" + "github.com/spacemeshos/go-spacemesh/sql/identities" +) + +type migration0025 struct { + handler malfeasanceValidator +} + +var _ sql.Migration = &migration0025{} + +func New0025Migration(handler malfeasanceValidator) *migration0025 { + return &migration0025{ + handler: handler, + } +} + +func (*migration0025) Name() string { + return "check DB for invalid malfeasance proofs" +} + +func (*migration0025) Order() int { + return 25 +} + +func (*migration0025) Rollback() error { + return nil +} + +func (m *migration0025) Apply(db sql.Executor, logger *zap.Logger) error { + updates := map[types.NodeID][]byte{} + + err := identities.IterateOps(db, builder.Operations{}, func(nodeID types.NodeID, bytes []byte, t time.Time) bool { + proof := &wire.MalfeasanceProof{} + codec.MustDecode(bytes, proof) + + id, err := m.handler.Validate(context.Background(), proof) + if err == nil && id == nodeID { + logger.Debug("Proof is valid", log.ZShortStringer("smesherID", nodeID)) + return true + } + + if proof.Proof.Type != wire.InvalidPrevATX { + logger.Warn("Found invalid proof during migration that cannot be fixed", + log.ZShortStringer("smesherID", nodeID), + zap.String("proof", hex.EncodeToString(bytes)), + zap.Error(err), + ) + return true + } + + proof.Proof.Data.(*wire.InvalidPrevATXProof).Atx1.VRFNonce = nil + id, err = m.handler.Validate(context.Background(), proof) + if err == nil && id == nodeID { + updates[nodeID] = codec.MustEncode(proof) + return true + } + logger.Error("Failed to fix invalid malfeasance proof during migration", + log.ZShortStringer("smesherID", nodeID), + zap.String("proof", hex.EncodeToString(bytes)), + zap.Error(err), + ) + return true + }) + if err != nil { + return err + } + for nodeID, proofBytes := range updates { + if _, err := db.Exec(` + UPDATE identities + SET proof = ?2 + WHERE pubkey = ?1 + `, func(stmt *sql.Statement) { + stmt.BindBytes(1, nodeID.Bytes()) + stmt.BindBytes(2, proofBytes) + }, nil); err != nil { + logger.Error("Failed to update invalid proof", + log.ZShortStringer("smesherID", nodeID), + zap.Error(err), + ) + } + logger.Info("Fixed invalid proof during migration", + log.ZShortStringer("smesherID", nodeID), + ) + } + return nil +} diff --git a/sql/statesql/migrations/state_0025_migration_test.go b/sql/statesql/migrations/state_0025_migration_test.go new file mode 100644 index 0000000000..ba6b16e2a3 --- /dev/null +++ b/sql/statesql/migrations/state_0025_migration_test.go @@ -0,0 +1,217 @@ +package migrations + +import ( + "context" + "errors" + "slices" + "testing" + "time" + + "github.com/stretchr/testify/require" + gomock "go.uber.org/mock/gomock" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zaptest" + "go.uber.org/zap/zaptest/observer" + + "github.com/spacemeshos/go-spacemesh/activation/wire" + "github.com/spacemeshos/go-spacemesh/codec" + "github.com/spacemeshos/go-spacemesh/common/types" + mwire "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/sql" + "github.com/spacemeshos/go-spacemesh/sql/identities" + "github.com/spacemeshos/go-spacemesh/sql/statesql" +) + +func Test0025Migration(t *testing.T) { + setup := func(tb testing.TB) sql.StateDatabase { + schema, err := statesql.Schema() + require.NoError(tb, err) + schema.Migrations = slices.DeleteFunc(schema.Migrations, func(m sql.Migration) bool { + return m.Order() >= 25 + }) + db := statesql.InMemoryTest( + tb, + sql.WithDatabaseSchema(schema), + sql.WithNoCheckSchemaDrift(), + sql.WithForceMigrations(true), + ) + return db + } + + t.Run("valid proof is noop", func(t *testing.T) { + db := setup(t) + + // store valid proof + nodeID := types.RandomNodeID() + proof := &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.MultipleATXs, + Data: &mwire.AtxProof{}, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + ctrl := gomock.NewController(t) + mHandler := NewMockmalfeasanceValidator(ctrl) + mHandler.EXPECT().Validate(context.Background(), proof).Return(nodeID, nil) + + m := New0025Migration(mHandler) + require.Equal(t, 25, m.Order()) + require.NoError(t, m.Apply(db, zaptest.NewLogger(t))) + }) + + t.Run("invalid proof is logged", func(t *testing.T) { + db := setup(t) + + // store invalid proof + nodeID := types.RandomNodeID() + proof := &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.MultipleATXs, + Data: &mwire.AtxProof{}, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + ctrl := gomock.NewController(t) + mHandler := NewMockmalfeasanceValidator(ctrl) + mHandler.EXPECT().Validate(context.Background(), proof). + Return(types.EmptyNodeID, errors.New("invalid signature")) + + observer, observedLogs := observer.New(zapcore.WarnLevel) + logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( + func(core zapcore.Core) zapcore.Core { + return zapcore.NewTee(core, observer) + }, + ))) + + m := New0025Migration(mHandler) + require.Equal(t, 25, m.Order()) + require.NoError(t, m.Apply(db, logger)) + + require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") + require.Equal(t, zapcore.WarnLevel, observedLogs.All()[0].Level) + require.Equal(t, "Found invalid proof during migration that cannot be fixed", observedLogs.All()[0].Message) + require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + require.Equal(t, "invalid signature", observedLogs.All()[0].ContextMap()["error"]) + }) + + t.Run("invalid proof is fixed", func(t *testing.T) { + db := setup(t) + + // store invalid proof + nonce := uint64(1337) + nodeID := types.RandomNodeID() + proof := &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.InvalidPrevATX, + Data: &mwire.InvalidPrevATXProof{ + Atx1: wire.ActivationTxV1{ + InnerActivationTxV1: wire.InnerActivationTxV1{ + VRFNonce: &nonce, + }, + }, + Atx2: wire.ActivationTxV1{}, + }, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + ctrl := gomock.NewController(t) + mHandler := NewMockmalfeasanceValidator(ctrl) + + // first call to Validate returns error + mHandler.EXPECT().Validate(context.Background(), proof). + Return(types.EmptyNodeID, errors.New("invalid signature")) + + // second call to Validate returns valid nodeID + mHandler.EXPECT().Validate(context.Background(), gomock.Cond(func(x any) bool { + return x.(*mwire.MalfeasanceProof).Proof.Type == mwire.InvalidPrevATX && + x.(*mwire.MalfeasanceProof).Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce == nil + })).Return(nodeID, nil) + + observer, observedLogs := observer.New(zapcore.InfoLevel) + logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( + func(core zapcore.Core) zapcore.Core { + return zapcore.NewTee(core, observer) + }, + ))) + + m := New0025Migration(mHandler) + require.Equal(t, 25, m.Order()) + require.NoError(t, m.Apply(db, logger)) + + require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") + require.Equal(t, zapcore.InfoLevel, observedLogs.All()[0].Level) + require.Equal(t, "Fixed invalid proof during migration", observedLogs.All()[0].Message) + require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + + // check proof was updated + blob := &sql.Blob{} + err := identities.LoadMalfeasanceBlob(context.Background(), db, nodeID.Bytes(), blob) + require.NoError(t, err) + updatedProof := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, updatedProof) + + require.NotEqual(t, proof, updatedProof) + require.Nil(t, updatedProof.Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce) + }) + + t.Run("invalid proof cannot be fixed", func(t *testing.T) { + db := setup(t) + + // store invalid proof + nonce := uint64(1337) + nodeID := types.RandomNodeID() + proof := &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.InvalidPrevATX, + Data: &mwire.InvalidPrevATXProof{ + Atx1: wire.ActivationTxV1{ + InnerActivationTxV1: wire.InnerActivationTxV1{ + VRFNonce: &nonce, + }, + }, + Atx2: wire.ActivationTxV1{}, + }, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + ctrl := gomock.NewController(t) + mHandler := NewMockmalfeasanceValidator(ctrl) + + // first call to Validate returns error + mHandler.EXPECT().Validate(context.Background(), proof). + Return(types.EmptyNodeID, errors.New("invalid signature")) + + // second call to Validate still returns error + mHandler.EXPECT().Validate(context.Background(), gomock.Cond(func(x any) bool { + return x.(*mwire.MalfeasanceProof).Proof.Type == mwire.InvalidPrevATX && + x.(*mwire.MalfeasanceProof).Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce == nil + })).Return(types.EmptyNodeID, errors.New("invalid signature")) + + observer, observedLogs := observer.New(zapcore.ErrorLevel) + logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( + func(core zapcore.Core) zapcore.Core { + return zapcore.NewTee(core, observer) + }, + ))) + + m := New0025Migration(mHandler) + require.Equal(t, 25, m.Order()) + require.NoError(t, m.Apply(db, logger)) + + require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") + require.Equal(t, zapcore.ErrorLevel, observedLogs.All()[0].Level) + require.Equal(t, "Failed to fix invalid malfeasance proof during migration", observedLogs.All()[0].Message) + require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + require.Equal(t, "invalid signature", observedLogs.All()[0].ContextMap()["error"]) + + // check proof not updated + blob := &sql.Blob{} + err := identities.LoadMalfeasanceBlob(context.Background(), db, nodeID.Bytes(), blob) + require.NoError(t, err) + updatedProof := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, updatedProof) + + require.Equal(t, proof, updatedProof) + }) +} diff --git a/sql/statesql/schema/migrations/0017_atxs_prev_id_nonce_placeholder.sql b/sql/statesql/schema/migrations/0017_atxs_prev_id_nonce_placeholder.sql index 7e4a34351e..d39d54b6a2 100644 --- a/sql/statesql/schema/migrations/0017_atxs_prev_id_nonce_placeholder.sql +++ b/sql/statesql/schema/migrations/0017_atxs_prev_id_nonce_placeholder.sql @@ -1 +1 @@ --- Migration is done entirely in code +-- Migration is done entirely in code and doesn't change the schema. diff --git a/sql/statesql/schema/migrations/0025_check_malfeasance.sql b/sql/statesql/schema/migrations/0025_check_malfeasance.sql new file mode 100644 index 0000000000..d39d54b6a2 --- /dev/null +++ b/sql/statesql/schema/migrations/0025_check_malfeasance.sql @@ -0,0 +1 @@ +-- Migration is done entirely in code and doesn't change the schema. diff --git a/sql/statesql/schema/schema.sql b/sql/statesql/schema/schema.sql index c1cd6a427a..913b1f287f 100755 --- a/sql/statesql/schema/schema.sql +++ b/sql/statesql/schema/schema.sql @@ -1,4 +1,4 @@ -PRAGMA user_version = 24; +PRAGMA user_version = 25; CREATE TABLE accounts ( address CHAR(24), From e78b3a91e68c7b228f4ecccac57cbf21feaf40f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:25:28 +0000 Subject: [PATCH 39/73] build(deps): Bump github.com/prometheus/client_golang from 1.20.4 to 1.20.5 (#6389) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9a536425ee..e95fbabca5 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ require ( github.com/multiformats/go-varint v0.0.7 github.com/natefinch/atomic v1.0.1 github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a - github.com/prometheus/client_golang v1.20.4 + github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/prometheus/common v0.60.0 github.com/quic-go/quic-go v0.47.0 diff --git a/go.sum b/go.sum index 8c2a956fa4..424ff048f4 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= -github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= From 12e708561d2c4079b9c545cccf46a30f3bbd08c7 Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Wed, 16 Oct 2024 09:45:02 +0000 Subject: [PATCH 40/73] Create separate connection to state DB for API (#6386) --- api/grpcserver/config.go | 3 +++ node/node.go | 40 ++++++++++++++++++++++++++++++---------- sql/database.go | 17 +++++++++++++++-- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/api/grpcserver/config.go b/api/grpcserver/config.go index 801f07a980..089b7a8008 100644 --- a/api/grpcserver/config.go +++ b/api/grpcserver/config.go @@ -23,6 +23,8 @@ type Config struct { JSONCorsAllowedOrigins []string `mapstructure:"grpc-cors-allowed-origins"` SmesherStreamInterval time.Duration `mapstructure:"smesherstreaminterval"` + + DatabaseConnections int `mapstructure:"db-connections"` } type Service = string @@ -77,6 +79,7 @@ func DefaultConfig() Config { GrpcSendMsgSize: 1024 * 1024 * 10, GrpcRecvMsgSize: 1024 * 1024 * 10, SmesherStreamInterval: time.Second, + DatabaseConnections: 16, } } diff --git a/node/node.go b/node/node.go index 44ad9db4c0..ee4cdb55d9 100644 --- a/node/node.go +++ b/node/node.go @@ -108,6 +108,7 @@ const ( PostServiceLogger = "postService" PostInfoServiceLogger = "postInfoService" StateDbLogger = "stateDb" + ApiStateDBLogger = "apiStateDB" BeaconLogger = "beacon" CachedDBLogger = "cachedDB" PoetDbLogger = "poetDb" @@ -374,6 +375,7 @@ type App struct { signers []*signing.EdSigner Config *config.Config db sql.StateDatabase + apiDB sql.StateDatabase cachedDB *datastore.CachedDB dbMetrics *dbmetrics.DBMetricsCollector localDB sql.LocalDatabase @@ -1535,27 +1537,27 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv app.grpcServices[svc] = service return service, nil case v2alpha1.Activation: - service := v2alpha1.NewActivationService(app.db) + service := v2alpha1.NewActivationService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.ActivationStream: - service := v2alpha1.NewActivationStreamService(app.db) + service := v2alpha1.NewActivationStreamService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.Reward: - service := v2alpha1.NewRewardService(app.db) + service := v2alpha1.NewRewardService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.RewardStream: - service := v2alpha1.NewRewardStreamService(app.db) + service := v2alpha1.NewRewardStreamService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.Malfeasance: - service := v2alpha1.NewMalfeasanceService(app.db, app.malfeasanceHandler) + service := v2alpha1.NewMalfeasanceService(app.apiDB, app.malfeasanceHandler) app.grpcServices[svc] = service return service, nil case v2alpha1.MalfeasanceStream: - service := v2alpha1.NewMalfeasanceStreamService(app.db, app.malfeasanceHandler) + service := v2alpha1.NewMalfeasanceStreamService(app.apiDB, app.malfeasanceHandler) app.grpcServices[svc] = service return service, nil case v2alpha1.Network: @@ -1570,15 +1572,15 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv app.grpcServices[svc] = service return service, nil case v2alpha1.Layer: - service := v2alpha1.NewLayerService(app.db) + service := v2alpha1.NewLayerService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.LayerStream: - service := v2alpha1.NewLayerStreamService(app.db) + service := v2alpha1.NewLayerStreamService(app.apiDB) app.grpcServices[svc] = service return service, nil case v2alpha1.Transaction: - service := v2alpha1.NewTransactionService(app.db, app.conState, app.syncer, app.txHandler, app.host) + service := v2alpha1.NewTransactionService(app.apiDB, app.conState, app.syncer, app.txHandler, app.host) app.grpcServices[svc] = service return service, nil case v2alpha1.TransactionStream: @@ -1586,7 +1588,7 @@ func (app *App) grpcService(svc grpcserver.Service, lg log.Log) (grpcserver.Serv app.grpcServices[svc] = service return service, nil case v2alpha1.Account: - service := v2alpha1.NewAccountService(app.db, app.conState) + service := v2alpha1.NewAccountService(app.apiDB, app.conState) app.grpcServices[svc] = service return service, nil } @@ -1921,6 +1923,11 @@ func (app *App) stopServices(ctx context.Context) { app.log.With().Warning("db exited with error", log.Err(err)) } } + if app.apiDB != nil { + if err := app.apiDB.Close(); err != nil { + app.log.With().Warning("api db exited with error", log.Err(err)) + } + } if app.dbMetrics != nil { app.dbMetrics.Close() } @@ -1980,6 +1987,19 @@ func (app *App) setupDBs(ctx context.Context, lg log.Log) error { return fmt.Errorf("open sqlite db: %w", err) } app.db = sqlDB + + apiDBLog := app.addLogger(ApiStateDBLogger, lg).Zap() + apiSqlDB, err := statesql.Open("file:"+filepath.Join(dbPath, dbFile), + sql.WithReadOnly(), + sql.WithLogger(apiDBLog), + sql.WithConnections(app.Config.API.DatabaseConnections), + sql.WithMigrationsDisabled(), + ) + if err != nil { + return fmt.Errorf("open sqlite db: %w", err) + } + app.apiDB = apiSqlDB + if app.Config.CollectMetrics && app.Config.DatabaseSizeMeteringInterval != 0 { app.dbMetrics = dbmetrics.NewDBMetricsCollector( ctx, diff --git a/sql/database.go b/sql/database.go index 17e41c399f..78de23395d 100644 --- a/sql/database.go +++ b/sql/database.go @@ -95,6 +95,7 @@ type conf struct { temp bool handleIncompleteMigrations bool exclusive bool + readOnly bool } // WithConnections overwrites number of pooled connections. @@ -216,6 +217,13 @@ func WithExclusive() Opt { } } +// WithReadOnly specifies that the database is to be open in read-only mode. +func WithReadOnly() Opt { + return func(c *conf) { + c.readOnly = true + } +} + // Opt for configuring database. type Opt func(c *conf) @@ -258,8 +266,7 @@ func openDB(config *conf) (db *sqliteDatabase, err error) { logger := config.logger.With(zap.String("uri", config.uri)) var flags sqlite.OpenFlags if !config.forceFresh { - flags = sqlite.SQLITE_OPEN_READWRITE | - sqlite.SQLITE_OPEN_URI | + flags = sqlite.SQLITE_OPEN_URI | sqlite.SQLITE_OPEN_NOMUTEX if !config.temp { // Note that SQLITE_OPEN_WAL is not handled by SQLITE api itself, @@ -269,7 +276,13 @@ func openDB(config *conf) (db *sqliteDatabase, err error) { // using any journal flags |= sqlite.SQLITE_OPEN_WAL } + if !config.readOnly { + flags |= sqlite.SQLITE_OPEN_READWRITE + } else { + flags |= sqlite.SQLITE_OPEN_READONLY + } } + freshDB := config.forceFresh if config.exclusive { config.connections = 1 From 40fc1603ae266a2ab050a73b4d5a02ac9083f250 Mon Sep 17 00:00:00 2001 From: acud <12988138+acud@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:26:00 +0000 Subject: [PATCH 41/73] chore: hookup hare4 handler (#6391) ## Motivation p2p server was not hooked up correctly, causing errors on stream handling. --- hare4/hare.go | 1 + hare4/hare_test.go | 1 + hare4/interface.go | 1 + hare4/mocks/mocks.go | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/hare4/hare.go b/hare4/hare.go index 123c37c1c5..5242658406 100644 --- a/hare4/hare.go +++ b/hare4/hare.go @@ -291,6 +291,7 @@ func (h *Hare) Coins() <-chan WeakCoinOutput { func (h *Hare) Start() { h.pubsub.Register(h.config.ProtocolName, h.Handler, pubsub.WithValidatorInline(true)) + h.eg.Go(func() error { return h.p2p.Run(h.ctx) }) current := h.nodeClock.CurrentLayer() + 1 enabled := max(current, h.config.EnableLayer, types.GetEffectiveGenesis()+1) disabled := types.LayerID(math.MaxUint32) diff --git a/hare4/hare_test.go b/hare4/hare_test.go index d3bea768dd..904c20e8ff 100644 --- a/hare4/hare_test.go +++ b/hare4/hare_test.go @@ -221,6 +221,7 @@ func (n *node) withPublisher() *node { func (n *node) withStreamRequester() *node { n.mockStreamRequester = hmock.NewMockstreamRequester(n.ctrl) + n.mockStreamRequester.EXPECT().Run(gomock.Any()).Return(nil).AnyTimes() return n } diff --git a/hare4/interface.go b/hare4/interface.go index 1401065dfa..024fdba019 100644 --- a/hare4/interface.go +++ b/hare4/interface.go @@ -12,6 +12,7 @@ import ( //go:generate mockgen -typed -package=mocks -destination=./mocks/mocks.go -source=./interface.go type streamRequester interface { + Run(ctx context.Context) error StreamRequest(context.Context, p2p.Peer, []byte, server.StreamRequestCallback, ...string) error } diff --git a/hare4/mocks/mocks.go b/hare4/mocks/mocks.go index f3e813e77b..dd9d3d966a 100644 --- a/hare4/mocks/mocks.go +++ b/hare4/mocks/mocks.go @@ -43,6 +43,44 @@ func (m *MockstreamRequester) EXPECT() *MockstreamRequesterMockRecorder { return m.recorder } +// Run mocks base method. +func (m *MockstreamRequester) Run(ctx context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", ctx) + ret0, _ := ret[0].(error) + return ret0 +} + +// Run indicates an expected call of Run. +func (mr *MockstreamRequesterMockRecorder) Run(ctx any) *MockstreamRequesterRunCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockstreamRequester)(nil).Run), ctx) + return &MockstreamRequesterRunCall{Call: call} +} + +// MockstreamRequesterRunCall wrap *gomock.Call +type MockstreamRequesterRunCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockstreamRequesterRunCall) Return(arg0 error) *MockstreamRequesterRunCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockstreamRequesterRunCall) Do(f func(context.Context) error) *MockstreamRequesterRunCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockstreamRequesterRunCall) DoAndReturn(f func(context.Context) error) *MockstreamRequesterRunCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + // StreamRequest mocks base method. func (m *MockstreamRequester) StreamRequest(arg0 context.Context, arg1 p2p.Peer, arg2 []byte, arg3 server.StreamRequestCallback, arg4 ...string) error { m.ctrl.T.Helper() From fc014aee561b0363c12824a387ff85f6034c6a88 Mon Sep 17 00:00:00 2001 From: Kacper Sawicki Date: Wed, 16 Oct 2024 15:13:08 +0000 Subject: [PATCH 42/73] api: Use grpc-gateway runtime middleware for metrics (#6390) --- api/grpcserver/http_server.go | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/api/grpcserver/http_server.go b/api/grpcserver/http_server.go index 6c0087c15b..b505edca94 100644 --- a/api/grpcserver/http_server.go +++ b/api/grpcserver/http_server.go @@ -82,8 +82,26 @@ func (s *JSONHTTPServer) StartService( return errors.New("no services provided") } + // setup metrics middleware + var mdlws []runtime.Middleware + if s.collectMetrics { + mdlw := middleware.New(middleware.Config{ + Recorder: metricsProm.NewRecorder(metricsProm.Config{ + Prefix: metrics.Namespace + "_api", + }), + }) + mdlws = append(mdlws, func(next runtime.HandlerFunc) runtime.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { + wrappedNext := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + next(w, r, pathParams) + }) + std.Handler("", mdlw, wrappedNext).ServeHTTP(w, r) + } + }) + } + // register each individual, enabled service - mux := runtime.NewServeMux() + mux := runtime.NewServeMux(runtime.WithMiddlewares(mdlws...)) for _, svc := range services { if err := svc.RegisterHandlerService(mux); err != nil { @@ -96,17 +114,6 @@ func (s *JSONHTTPServer) StartService( AllowedOrigins: s.origins, }) - // mdlw is the middleware stack for the http server - handler := c.Handler(mux) - if s.collectMetrics { - mdlw := middleware.New(middleware.Config{ - Recorder: metricsProm.NewRecorder(metricsProm.Config{ - Prefix: metrics.Namespace + "_api", - }), - }) - handler = c.Handler(std.Handler("", mdlw, mux)) - } - s.logger.Info("starting grpc gateway server", zap.String("address", s.listener)) lis, err := net.Listen("tcp", s.listener) if err != nil { @@ -117,7 +124,7 @@ func (s *JSONHTTPServer) StartService( MaxHeaderBytes: 1 << 21, ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, - Handler: handler, + Handler: c.Handler(mux), } s.eg.Go(func() error { if err := s.server.Serve(lis); err != nil { From e20e5cf59279c58b0e2f0753169dc6d050fc8806 Mon Sep 17 00:00:00 2001 From: Matthias Fasching <5011972+fasmat@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:02:08 +0000 Subject: [PATCH 43/73] Fix DB migration failing (#6392) ## Motivation This fixes an issue with migration 25 that leads to panics during startup. --- activation/wire/wire_v1.go | 4 +- node/node.go | 2 +- sql/statesql/migrations/interfaces.go | 14 - sql/statesql/migrations/mocks.go | 81 ----- sql/statesql/migrations/schema.go | 5 +- sql/statesql/migrations/schema_test.go | 3 +- .../migrations/state_0025_migration.go | 58 +++- .../migrations/state_0025_migration_test.go | 295 +++++++++++++----- 8 files changed, 264 insertions(+), 198 deletions(-) delete mode 100644 sql/statesql/migrations/interfaces.go delete mode 100644 sql/statesql/migrations/mocks.go diff --git a/activation/wire/wire_v1.go b/activation/wire/wire_v1.go index 79daf37f66..059180c9dc 100644 --- a/activation/wire/wire_v1.go +++ b/activation/wire/wire_v1.go @@ -25,8 +25,8 @@ type ActivationTxV1 struct { blob []byte } -// InnerActivationTxV1 is a set of all of an ATX's fields, except the signature. To generate the ATX signature, this -// structure is serialized and signed. +// InnerActivationTxV1 is the set of all fields of an ATX that are used to calculate the ATX ID. It contains all fields +// besides the Signature and the Smesher ID. type InnerActivationTxV1 struct { NIPostChallengeV1 diff --git a/node/node.go b/node/node.go index ee4cdb55d9..ca15e527b3 100644 --- a/node/node.go +++ b/node/node.go @@ -1961,7 +1961,7 @@ func (app *App) setupDBs(ctx context.Context, lg log.Log) error { return fmt.Errorf("failed to create %s: %w", dbPath, err) } dbLog := app.addLogger(StateDbLogger, lg).Zap() - schema, err := statemigrations.SchemaWithInCodeMigrations(app.malfeasanceHandler) + schema, err := statemigrations.SchemaWithInCodeMigrations(*app.Config) if err != nil { return fmt.Errorf("error loading db schema: %w", err) } diff --git a/sql/statesql/migrations/interfaces.go b/sql/statesql/migrations/interfaces.go deleted file mode 100644 index c1580b8582..0000000000 --- a/sql/statesql/migrations/interfaces.go +++ /dev/null @@ -1,14 +0,0 @@ -package migrations - -import ( - "context" - - "github.com/spacemeshos/go-spacemesh/common/types" - "github.com/spacemeshos/go-spacemesh/malfeasance/wire" -) - -//go:generate mockgen -typed -package=migrations -destination=./mocks.go -source=interfaces.go - -type malfeasanceValidator interface { - Validate(ctx context.Context, proof *wire.MalfeasanceProof) (types.NodeID, error) -} diff --git a/sql/statesql/migrations/mocks.go b/sql/statesql/migrations/mocks.go deleted file mode 100644 index c5924a43f6..0000000000 --- a/sql/statesql/migrations/mocks.go +++ /dev/null @@ -1,81 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: interfaces.go -// -// Generated by this command: -// -// mockgen -typed -package=migrations -destination=./mocks.go -source=interfaces.go -// - -// Package migrations is a generated GoMock package. -package migrations - -import ( - context "context" - reflect "reflect" - - types "github.com/spacemeshos/go-spacemesh/common/types" - wire "github.com/spacemeshos/go-spacemesh/malfeasance/wire" - gomock "go.uber.org/mock/gomock" -) - -// MockmalfeasanceValidator is a mock of malfeasanceValidator interface. -type MockmalfeasanceValidator struct { - ctrl *gomock.Controller - recorder *MockmalfeasanceValidatorMockRecorder -} - -// MockmalfeasanceValidatorMockRecorder is the mock recorder for MockmalfeasanceValidator. -type MockmalfeasanceValidatorMockRecorder struct { - mock *MockmalfeasanceValidator -} - -// NewMockmalfeasanceValidator creates a new mock instance. -func NewMockmalfeasanceValidator(ctrl *gomock.Controller) *MockmalfeasanceValidator { - mock := &MockmalfeasanceValidator{ctrl: ctrl} - mock.recorder = &MockmalfeasanceValidatorMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockmalfeasanceValidator) EXPECT() *MockmalfeasanceValidatorMockRecorder { - return m.recorder -} - -// Validate mocks base method. -func (m *MockmalfeasanceValidator) Validate(ctx context.Context, proof *wire.MalfeasanceProof) (types.NodeID, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Validate", ctx, proof) - ret0, _ := ret[0].(types.NodeID) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Validate indicates an expected call of Validate. -func (mr *MockmalfeasanceValidatorMockRecorder) Validate(ctx, proof any) *MockmalfeasanceValidatorValidateCall { - mr.mock.ctrl.T.Helper() - call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validate", reflect.TypeOf((*MockmalfeasanceValidator)(nil).Validate), ctx, proof) - return &MockmalfeasanceValidatorValidateCall{Call: call} -} - -// MockmalfeasanceValidatorValidateCall wrap *gomock.Call -type MockmalfeasanceValidatorValidateCall struct { - *gomock.Call -} - -// Return rewrite *gomock.Call.Return -func (c *MockmalfeasanceValidatorValidateCall) Return(arg0 types.NodeID, arg1 error) *MockmalfeasanceValidatorValidateCall { - c.Call = c.Call.Return(arg0, arg1) - return c -} - -// Do rewrite *gomock.Call.Do -func (c *MockmalfeasanceValidatorValidateCall) Do(f func(context.Context, *wire.MalfeasanceProof) (types.NodeID, error)) *MockmalfeasanceValidatorValidateCall { - c.Call = c.Call.Do(f) - return c -} - -// DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockmalfeasanceValidatorValidateCall) DoAndReturn(f func(context.Context, *wire.MalfeasanceProof) (types.NodeID, error)) *MockmalfeasanceValidatorValidateCall { - c.Call = c.Call.DoAndReturn(f) - return c -} diff --git a/sql/statesql/migrations/schema.go b/sql/statesql/migrations/schema.go index bf9bf57b56..caa58246fd 100644 --- a/sql/statesql/migrations/schema.go +++ b/sql/statesql/migrations/schema.go @@ -1,13 +1,14 @@ package migrations import ( + "github.com/spacemeshos/go-spacemesh/config" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/statesql" ) -func SchemaWithInCodeMigrations(malHandler malfeasanceValidator) (*sql.Schema, error) { +func SchemaWithInCodeMigrations(config config.Config) (*sql.Schema, error) { return statesql.Schema( New0021Migration(1_000_000), - New0025Migration(malHandler), + New0025Migration(config), ) } diff --git a/sql/statesql/migrations/schema_test.go b/sql/statesql/migrations/schema_test.go index 938036b7ff..5923ca4fe8 100644 --- a/sql/statesql/migrations/schema_test.go +++ b/sql/statesql/migrations/schema_test.go @@ -6,11 +6,12 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" + "github.com/spacemeshos/go-spacemesh/config" "github.com/spacemeshos/go-spacemesh/sql" ) func TestCodedMigrations(t *testing.T) { - schema, err := SchemaWithInCodeMigrations(nil) + schema, err := SchemaWithInCodeMigrations(config.DefaultConfig()) require.NoError(t, err) db := sql.InMemory( diff --git a/sql/statesql/migrations/state_0025_migration.go b/sql/statesql/migrations/state_0025_migration.go index 6d675981ba..71fee844fa 100644 --- a/sql/statesql/migrations/state_0025_migration.go +++ b/sql/statesql/migrations/state_0025_migration.go @@ -1,30 +1,34 @@ package migrations import ( - "context" "encoding/hex" + "errors" "time" "go.uber.org/zap" "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/config" "github.com/spacemeshos/go-spacemesh/log" "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/builder" "github.com/spacemeshos/go-spacemesh/sql/identities" ) type migration0025 struct { - handler malfeasanceValidator + edVerifier *signing.EdVerifier } var _ sql.Migration = &migration0025{} -func New0025Migration(handler malfeasanceValidator) *migration0025 { +func New0025Migration(config config.Config) *migration0025 { return &migration0025{ - handler: handler, + edVerifier: signing.NewEdVerifier( + signing.WithVerifierPrefix(config.Genesis.GenesisID().Bytes()), + ), } } @@ -47,23 +51,18 @@ func (m *migration0025) Apply(db sql.Executor, logger *zap.Logger) error { proof := &wire.MalfeasanceProof{} codec.MustDecode(bytes, proof) - id, err := m.handler.Validate(context.Background(), proof) - if err == nil && id == nodeID { - logger.Debug("Proof is valid", log.ZShortStringer("smesherID", nodeID)) + if proof.Proof.Type != wire.InvalidPrevATX { + // we only care about invalid prev ATX proofs return true } - if proof.Proof.Type != wire.InvalidPrevATX { - logger.Warn("Found invalid proof during migration that cannot be fixed", - log.ZShortStringer("smesherID", nodeID), - zap.String("proof", hex.EncodeToString(bytes)), - zap.Error(err), - ) + id, err := m.Validate(proof.Proof.Data) + if err == nil && id == nodeID { + logger.Debug("Proof is valid", log.ZShortStringer("smesherID", nodeID)) return true } - proof.Proof.Data.(*wire.InvalidPrevATXProof).Atx1.VRFNonce = nil - id, err = m.handler.Validate(context.Background(), proof) + id, err = m.Validate(proof.Proof.Data) if err == nil && id == nodeID { updates[nodeID] = codec.MustEncode(proof) return true @@ -98,3 +97,32 @@ func (m *migration0025) Apply(db sql.Executor, logger *zap.Logger) error { } return nil } + +func (m *migration0025) Validate(data wire.ProofData) (types.NodeID, error) { + proof, ok := data.(*wire.InvalidPrevATXProof) + if !ok { + return types.EmptyNodeID, errors.New("wrong message type for invalid previous ATX") + } + + atx1 := proof.Atx1 + if !m.edVerifier.Verify(signing.ATX, atx1.SmesherID, atx1.SignedBytes(), atx1.Signature) { + return types.EmptyNodeID, errors.New("atx1: invalid signature") + } + + atx2 := proof.Atx2 + if atx1.SmesherID != atx2.SmesherID { + return types.EmptyNodeID, errors.New("invalid old prev ATX malfeasance proof: smesher IDs are different") + } + + if !m.edVerifier.Verify(signing.ATX, atx2.SmesherID, atx2.SignedBytes(), atx2.Signature) { + return types.EmptyNodeID, errors.New("atx2: invalid signature") + } + + if atx1.ID() == atx2.ID() { + return types.EmptyNodeID, errors.New("invalid old prev ATX malfeasance proof: ATX IDs are the same") + } + if atx1.PrevATXID != atx2.PrevATXID { + return types.EmptyNodeID, errors.New("invalid old prev ATX malfeasance proof: prev ATX IDs are different") + } + return atx1.SmesherID, nil +} diff --git a/sql/statesql/migrations/state_0025_migration_test.go b/sql/statesql/migrations/state_0025_migration_test.go index ba6b16e2a3..8d8547d327 100644 --- a/sql/statesql/migrations/state_0025_migration_test.go +++ b/sql/statesql/migrations/state_0025_migration_test.go @@ -2,13 +2,13 @@ package migrations import ( "context" - "errors" "slices" "testing" "time" + "github.com/spacemeshos/merkle-tree" + "github.com/spacemeshos/poet/shared" "github.com/stretchr/testify/require" - gomock "go.uber.org/mock/gomock" "go.uber.org/zap" "go.uber.org/zap/zapcore" "go.uber.org/zap/zaptest" @@ -17,7 +17,9 @@ import ( "github.com/spacemeshos/go-spacemesh/activation/wire" "github.com/spacemeshos/go-spacemesh/codec" "github.com/spacemeshos/go-spacemesh/common/types" + "github.com/spacemeshos/go-spacemesh/config" mwire "github.com/spacemeshos/go-spacemesh/malfeasance/wire" + "github.com/spacemeshos/go-spacemesh/signing" "github.com/spacemeshos/go-spacemesh/sql" "github.com/spacemeshos/go-spacemesh/sql/identities" "github.com/spacemeshos/go-spacemesh/sql/statesql" @@ -39,10 +41,11 @@ func Test0025Migration(t *testing.T) { return db } - t.Run("valid proof is noop", func(t *testing.T) { + t.Run("non InvalidPrevATX proofs are ignored", func(t *testing.T) { db := setup(t) - // store valid proof + // store proofs of different types + proofs := make(map[types.NodeID]*mwire.MalfeasanceProof) nodeID := types.RandomNodeID() proof := &mwire.MalfeasanceProof{ Proof: mwire.Proof{ @@ -51,82 +54,138 @@ func Test0025Migration(t *testing.T) { }, } require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) - ctrl := gomock.NewController(t) - mHandler := NewMockmalfeasanceValidator(ctrl) - mHandler.EXPECT().Validate(context.Background(), proof).Return(nodeID, nil) + proofs[nodeID] = proof + + nodeID = types.RandomNodeID() + proof = &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.MultipleBallots, + Data: &mwire.BallotProof{}, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + proofs[nodeID] = proof + + nodeID = types.RandomNodeID() + proof = &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.HareEquivocation, + Data: &mwire.HareProof{}, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + proofs[nodeID] = proof - m := New0025Migration(mHandler) + nodeID = types.RandomNodeID() + proof = &mwire.MalfeasanceProof{ + Proof: mwire.Proof{ + Type: mwire.InvalidPostIndex, + Data: &mwire.InvalidPostIndexProof{}, + }, + } + require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) + proofs[nodeID] = proof + + m := New0025Migration(config.MainnetConfig()) require.Equal(t, 25, m.Order()) require.NoError(t, m.Apply(db, zaptest.NewLogger(t))) + + for nodeID, proof := range proofs { + blob := &sql.Blob{} + err := identities.LoadMalfeasanceBlob(context.Background(), db, nodeID.Bytes(), blob) + require.NoError(t, err) + got := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, got) + require.Equal(t, proof, got) + } }) - t.Run("invalid proof is logged", func(t *testing.T) { + t.Run("valid proof is ignored", func(t *testing.T) { db := setup(t) - // store invalid proof - nodeID := types.RandomNodeID() + // store valid proof + cfg := config.MainnetConfig() + sig, err := signing.NewEdSigner( + signing.WithPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + require.NoError(t, err) + + goldenATX := types.RandomATXID() + atx1 := newInitialATXv1(t, goldenATX, &goldenATX) + atx1.Sign(sig) + atx2 := newInitialATXv1(t, goldenATX, &goldenATX) + atx2.Sign(sig) + proof := &mwire.MalfeasanceProof{ Proof: mwire.Proof{ - Type: mwire.MultipleATXs, - Data: &mwire.AtxProof{}, + Type: mwire.InvalidPrevATX, + Data: &mwire.InvalidPrevATXProof{ + Atx1: *atx1, + Atx2: *atx2, + }, }, } - require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) - ctrl := gomock.NewController(t) - mHandler := NewMockmalfeasanceValidator(ctrl) - mHandler.EXPECT().Validate(context.Background(), proof). - Return(types.EmptyNodeID, errors.New("invalid signature")) + require.NoError(t, identities.SetMalicious(db, sig.NodeID(), codec.MustEncode(proof), time.Now())) - observer, observedLogs := observer.New(zapcore.WarnLevel) + observer, observedLogs := observer.New(zapcore.DebugLevel) logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( func(core zapcore.Core) zapcore.Core { return zapcore.NewTee(core, observer) }, ))) - m := New0025Migration(mHandler) + m := New0025Migration(cfg) require.Equal(t, 25, m.Order()) require.NoError(t, m.Apply(db, logger)) require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") - require.Equal(t, zapcore.WarnLevel, observedLogs.All()[0].Level) - require.Equal(t, "Found invalid proof during migration that cannot be fixed", observedLogs.All()[0].Message) - require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) - require.Equal(t, "invalid signature", observedLogs.All()[0].ContextMap()["error"]) + require.Equal(t, zapcore.DebugLevel, observedLogs.All()[0].Level) + require.Equal(t, "Proof is valid", observedLogs.All()[0].Message) + require.Equal(t, sig.NodeID().ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + + // check proof was not changed + blob := &sql.Blob{} + require.NoError(t, identities.LoadMalfeasanceBlob(context.Background(), db, sig.NodeID().Bytes(), blob)) + got := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, got) + + require.Equal(t, proof, got) }) t.Run("invalid proof is fixed", func(t *testing.T) { db := setup(t) // store invalid proof - nonce := uint64(1337) - nodeID := types.RandomNodeID() + cfg := config.MainnetConfig() + sig, err := signing.NewEdSigner( + signing.WithPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + require.NoError(t, err) + verifier := signing.NewEdVerifier( + signing.WithVerifierPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + + goldenATX := types.RandomATXID() + atx1 := newInitialATXv1(t, goldenATX, &goldenATX) + atx1.Sign(sig) + atx1.VRFNonce = new(uint64) + *atx1.VRFNonce = 1337 // broken proof because we set VRFNonce before storing it + require.False(t, verifier.Verify(signing.ATX, atx1.SmesherID, atx1.SignedBytes(), atx1.Signature)) + + atx2 := newInitialATXv1(t, goldenATX, &goldenATX) + atx2.Sign(sig) + require.True(t, verifier.Verify(signing.ATX, atx2.SmesherID, atx2.SignedBytes(), atx2.Signature)) + proof := &mwire.MalfeasanceProof{ Proof: mwire.Proof{ Type: mwire.InvalidPrevATX, Data: &mwire.InvalidPrevATXProof{ - Atx1: wire.ActivationTxV1{ - InnerActivationTxV1: wire.InnerActivationTxV1{ - VRFNonce: &nonce, - }, - }, - Atx2: wire.ActivationTxV1{}, + Atx1: *atx1, + Atx2: *atx2, }, }, } - require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) - ctrl := gomock.NewController(t) - mHandler := NewMockmalfeasanceValidator(ctrl) - - // first call to Validate returns error - mHandler.EXPECT().Validate(context.Background(), proof). - Return(types.EmptyNodeID, errors.New("invalid signature")) - - // second call to Validate returns valid nodeID - mHandler.EXPECT().Validate(context.Background(), gomock.Cond(func(x any) bool { - return x.(*mwire.MalfeasanceProof).Proof.Type == mwire.InvalidPrevATX && - x.(*mwire.MalfeasanceProof).Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce == nil - })).Return(nodeID, nil) + require.NoError(t, identities.SetMalicious(db, sig.NodeID(), codec.MustEncode(proof), time.Now())) observer, observedLogs := observer.New(zapcore.InfoLevel) logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( @@ -135,58 +194,58 @@ func Test0025Migration(t *testing.T) { }, ))) - m := New0025Migration(mHandler) + m := New0025Migration(cfg) require.Equal(t, 25, m.Order()) require.NoError(t, m.Apply(db, logger)) require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") require.Equal(t, zapcore.InfoLevel, observedLogs.All()[0].Level) require.Equal(t, "Fixed invalid proof during migration", observedLogs.All()[0].Message) - require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + require.Equal(t, sig.NodeID().ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) // check proof was updated blob := &sql.Blob{} - err := identities.LoadMalfeasanceBlob(context.Background(), db, nodeID.Bytes(), blob) - require.NoError(t, err) - updatedProof := &mwire.MalfeasanceProof{} - codec.MustDecode(blob.Bytes, updatedProof) + require.NoError(t, identities.LoadMalfeasanceBlob(context.Background(), db, sig.NodeID().Bytes(), blob)) + got := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, got) - require.NotEqual(t, proof, updatedProof) - require.Nil(t, updatedProof.Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce) + require.NotEqual(t, proof, got) + require.Nil(t, got.Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce) }) t.Run("invalid proof cannot be fixed", func(t *testing.T) { db := setup(t) // store invalid proof - nonce := uint64(1337) - nodeID := types.RandomNodeID() + cfg := config.MainnetConfig() + sig, err := signing.NewEdSigner( + signing.WithPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + require.NoError(t, err) + verifier := signing.NewEdVerifier( + signing.WithVerifierPrefix(cfg.Genesis.GenesisID().Bytes()), + ) + + goldenATX := types.RandomATXID() + atx1 := newInitialATXv1(t, goldenATX, &goldenATX) + atx1.Sign(sig) + atx1.Signature = types.RandomEdSignature() // invalid ATX signature + require.False(t, verifier.Verify(signing.ATX, atx1.SmesherID, atx1.SignedBytes(), atx1.Signature)) + + atx2 := newInitialATXv1(t, goldenATX, &goldenATX) + atx2.Sign(sig) + require.True(t, verifier.Verify(signing.ATX, atx2.SmesherID, atx2.SignedBytes(), atx2.Signature)) + proof := &mwire.MalfeasanceProof{ Proof: mwire.Proof{ Type: mwire.InvalidPrevATX, Data: &mwire.InvalidPrevATXProof{ - Atx1: wire.ActivationTxV1{ - InnerActivationTxV1: wire.InnerActivationTxV1{ - VRFNonce: &nonce, - }, - }, - Atx2: wire.ActivationTxV1{}, + Atx1: *atx1, + Atx2: *atx2, }, }, } - require.NoError(t, identities.SetMalicious(db, nodeID, codec.MustEncode(proof), time.Now())) - ctrl := gomock.NewController(t) - mHandler := NewMockmalfeasanceValidator(ctrl) - - // first call to Validate returns error - mHandler.EXPECT().Validate(context.Background(), proof). - Return(types.EmptyNodeID, errors.New("invalid signature")) - - // second call to Validate still returns error - mHandler.EXPECT().Validate(context.Background(), gomock.Cond(func(x any) bool { - return x.(*mwire.MalfeasanceProof).Proof.Type == mwire.InvalidPrevATX && - x.(*mwire.MalfeasanceProof).Proof.Data.(*mwire.InvalidPrevATXProof).Atx1.VRFNonce == nil - })).Return(types.EmptyNodeID, errors.New("invalid signature")) + require.NoError(t, identities.SetMalicious(db, sig.NodeID(), codec.MustEncode(proof), time.Now())) observer, observedLogs := observer.New(zapcore.ErrorLevel) logger := zaptest.NewLogger(t, zaptest.WrapOptions(zap.WrapCore( @@ -195,23 +254,95 @@ func Test0025Migration(t *testing.T) { }, ))) - m := New0025Migration(mHandler) + m := New0025Migration(config.MainnetConfig()) require.Equal(t, 25, m.Order()) require.NoError(t, m.Apply(db, logger)) require.Equal(t, 1, observedLogs.Len(), "expected 1 log message") require.Equal(t, zapcore.ErrorLevel, observedLogs.All()[0].Level) require.Equal(t, "Failed to fix invalid malfeasance proof during migration", observedLogs.All()[0].Message) - require.Equal(t, nodeID.ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) - require.Equal(t, "invalid signature", observedLogs.All()[0].ContextMap()["error"]) + require.Equal(t, sig.NodeID().ShortString(), observedLogs.All()[0].ContextMap()["smesherID"]) + require.Equal(t, "atx1: invalid signature", observedLogs.All()[0].ContextMap()["error"]) // check proof not updated blob := &sql.Blob{} - err := identities.LoadMalfeasanceBlob(context.Background(), db, nodeID.Bytes(), blob) - require.NoError(t, err) - updatedProof := &mwire.MalfeasanceProof{} - codec.MustDecode(blob.Bytes, updatedProof) + require.NoError(t, identities.LoadMalfeasanceBlob(context.Background(), db, sig.NodeID().Bytes(), blob)) + got := &mwire.MalfeasanceProof{} + codec.MustDecode(blob.Bytes, got) - require.Equal(t, proof, updatedProof) + require.Equal(t, proof, got) }) } + +func newInitialATXv1( + tb testing.TB, + posATXID types.ATXID, + comATXID *types.ATXID, + opts ...func(*wire.ActivationTxV1), +) *wire.ActivationTxV1 { + tb.Helper() + poetRef := types.RandomHash() + atx := &wire.ActivationTxV1{ + InnerActivationTxV1: wire.InnerActivationTxV1{ + NIPostChallengeV1: wire.NIPostChallengeV1{ + PrevATXID: types.EmptyATXID, + PublishEpoch: types.EpochID(3), + PositioningATXID: posATXID, + CommitmentATXID: comATXID, + InitialPost: &wire.PostV1{}, + }, + NIPost: newNIPosV1tWithPoet(tb, poetRef.Bytes()), + Coinbase: types.GenerateAddress([]byte("aaaa")), + NumUnits: 100, + }, + } + for _, opt := range opts { + opt(atx) + } + return atx +} + +func newNIPosV1tWithPoet(tb testing.TB, poetRef []byte) *wire.NIPostV1 { + tb.Helper() + proof, _ := newMerkleProof(tb, []types.Hash32{ + types.BytesToHash([]byte("challenge")), + types.BytesToHash([]byte("leaf2")), + types.BytesToHash([]byte("leaf3")), + types.BytesToHash([]byte("leaf4")), + }) + + return &wire.NIPostV1{ + Membership: wire.MerkleProofV1{ + Nodes: proof.Nodes, + LeafIndex: 0, + }, + Post: &wire.PostV1{ + Nonce: 0, + Indices: []byte{1, 2, 3}, + Pow: 0, + }, + PostMetadata: &wire.PostMetadataV1{ + Challenge: poetRef, + }, + } +} + +func newMerkleProof(tb testing.TB, leafs []types.Hash32) (types.MerkleProof, types.Hash32) { + tb.Helper() + tree, err := merkle.NewTreeBuilder(). + WithHashFunc(shared.HashMembershipTreeNode). + WithLeavesToProve(map[uint64]bool{0: true}). + Build() + require.NoError(tb, err) + for _, m := range leafs { + require.NoError(tb, tree.AddLeaf(m[:])) + } + root, nodes := tree.RootAndProof() + nodesH32 := make([]types.Hash32, 0, len(nodes)) + for _, n := range nodes { + nodesH32 = append(nodesH32, types.BytesToHash(n)) + } + return types.MerkleProof{ + Nodes: nodesH32, + }, types.BytesToHash(root) +} From f9069f10100e4bdca9338e97904307764f5c0d0c Mon Sep 17 00:00:00 2001 From: Ivan Shvedunov Date: Thu, 17 Oct 2024 04:52:29 +0000 Subject: [PATCH 44/73] syncv2: pairwise set reconciliation (#6350) ## Motivation Existing sync is causing a lot of resource usage, including memory consumption and network traffic, and can't replace gossip which can also be unreliable at times. --- dev-docs/pairwise-sync.excalidraw.gz | Bin 0 -> 9424 bytes dev-docs/pairwise-sync.png | Bin 0 -> 863517 bytes dev-docs/ranges.excalidraw.gz | Bin 0 -> 5022 bytes dev-docs/ranges.png | Bin 0 -> 1231316 bytes dev-docs/sync2-set-reconciliation.md | 769 +++++++++++++++++++++++++++ p2p/server/deadline_adjuster.go | 25 +- p2p/server/interface.go | 6 +- p2p/server/mocks/mocks.go | 2 +- p2p/server/server.go | 15 +- p2p/server/server_test.go | 8 +- sync2/rangesync/dispatcher.go | 69 +++ sync2/rangesync/dispatcher_test.go | 78 +++ sync2/rangesync/doc.go | 223 ++++++++ sync2/rangesync/dumbset.go | 270 ++++++++++ sync2/rangesync/export_test.go | 15 + sync2/rangesync/fingerprint.go | 76 +++ sync2/rangesync/fingerprint_test.go | 41 ++ sync2/rangesync/interface.go | 98 ++++ sync2/rangesync/keybytes.go | 83 +++ sync2/rangesync/keybytes_test.go | 59 ++ sync2/rangesync/message.go | 208 ++++++++ sync2/rangesync/minhash.go | 95 ++++ sync2/rangesync/minhash_test.go | 121 +++++ sync2/rangesync/p2p.go | 134 +++++ sync2/rangesync/p2p_test.go | 399 ++++++++++++++ sync2/rangesync/rangesync.go | 680 +++++++++++++++++++++++ sync2/rangesync/rangesync_test.go | 536 +++++++++++++++++++ sync2/rangesync/seq.go | 142 +++++ sync2/rangesync/seq_test.go | 25 + sync2/rangesync/wire_conduit.go | 236 ++++++++ sync2/rangesync/wire_conduit_test.go | 315 +++++++++++ sync2/rangesync/wire_helpers.go | 170 ++++++ sync2/rangesync/wire_types.go | 136 +++++ sync2/rangesync/wire_types_scale.go | 350 ++++++++++++ 34 files changed, 5364 insertions(+), 20 deletions(-) create mode 100644 dev-docs/pairwise-sync.excalidraw.gz create mode 100644 dev-docs/pairwise-sync.png create mode 100644 dev-docs/ranges.excalidraw.gz create mode 100644 dev-docs/ranges.png create mode 100644 dev-docs/sync2-set-reconciliation.md create mode 100644 sync2/rangesync/dispatcher.go create mode 100644 sync2/rangesync/dispatcher_test.go create mode 100644 sync2/rangesync/doc.go create mode 100644 sync2/rangesync/dumbset.go create mode 100644 sync2/rangesync/export_test.go create mode 100644 sync2/rangesync/fingerprint.go create mode 100644 sync2/rangesync/fingerprint_test.go create mode 100644 sync2/rangesync/interface.go create mode 100644 sync2/rangesync/keybytes.go create mode 100644 sync2/rangesync/keybytes_test.go create mode 100644 sync2/rangesync/message.go create mode 100644 sync2/rangesync/minhash.go create mode 100644 sync2/rangesync/minhash_test.go create mode 100644 sync2/rangesync/p2p.go create mode 100644 sync2/rangesync/p2p_test.go create mode 100644 sync2/rangesync/rangesync.go create mode 100644 sync2/rangesync/rangesync_test.go create mode 100644 sync2/rangesync/seq.go create mode 100644 sync2/rangesync/seq_test.go create mode 100644 sync2/rangesync/wire_conduit.go create mode 100644 sync2/rangesync/wire_conduit_test.go create mode 100644 sync2/rangesync/wire_helpers.go create mode 100644 sync2/rangesync/wire_types.go create mode 100644 sync2/rangesync/wire_types_scale.go diff --git a/dev-docs/pairwise-sync.excalidraw.gz b/dev-docs/pairwise-sync.excalidraw.gz new file mode 100644 index 0000000000000000000000000000000000000000..d89868bbed6664852c81f686e39a7a13f2589623 GIT binary patch literal 9424 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
gnSmP)PG>AG(H6C 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 Nk2$E$w5SSy3%hpdRPw9?BGZuD_)y~wz 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
    V|DHT2Jh%3N%kiA|`7@tTex;FA1}AmG0U^ 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 {UV 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≧ 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%0DmQtKK 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%0AdotO@ASZo&(a=eJKs{J6rlqk+v^yKu+gqSIM)~1 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 z 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

    tJcS{>v<1;-umuU7tEKqjEOq9lXZ!9 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%0Af7ZaE!=Dof?o6fyeD8@ucA+ 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

    F}&SHi#sS7!$hXs1ir74@H0p@ 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 (%yQ^%!bSWfA7iYVMa$@sWPhy-3B-eu4T<_4S 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

    T&IAngjG0G1r+a>ee{ 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