Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5da6287
runners: refactoring to simplify & future-proof
iurii-ssv Aug 23, 2025
02462b5
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 9, 2025
cc8a1a4
fix spec-alignment
iurii-ssv Sep 9, 2025
566bab5
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 11, 2025
f3fa1cc
fix concurrency typo/bug
iurii-ssv Sep 11, 2025
2ff879b
clarify startedMtx usage
iurii-ssv Sep 11, 2025
35c661a
simplify Stop method
iurii-ssv Sep 11, 2025
d61c43b
clarify the meaning of the started flag
iurii-ssv Sep 11, 2025
b76c258
simplify Validator started state
iurii-ssv Sep 11, 2025
02583a3
fix spec-alignment
iurii-ssv Sep 11, 2025
99b8dc5
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 11, 2025
f7cc7c4
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 11, 2025
e626997
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 15, 2025
6c56464
merge startedMtx and mtx
iurii-ssv Sep 16, 2025
c69ac3e
fix mutex initialization
iurii-ssv Sep 16, 2025
c22a32d
refactor duplicate runner intialization (in spec-tests)
iurii-ssv Sep 16, 2025
b0ca210
fix spec-alignment
iurii-ssv Sep 16, 2025
aa8cf82
address review comments
iurii-ssv Sep 17, 2025
8e5e7fe
get rid of Controller interace
iurii-ssv Sep 17, 2025
5d389f7
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 17, 2025
5480ca6
tiny adjustments
iurii-ssv Sep 17, 2025
ffd3c59
fix spec-alignment
iurii-ssv Sep 17, 2025
a51e101
adjust comment (code review)
iurii-ssv Sep 18, 2025
d185aba
Merge branch 'stage' into runners-refactoring
iurii-ssv Sep 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cli/operator/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -1066,7 +1066,7 @@ func syncContractEvents(
ctx context.Context,
logger *zap.Logger,
executionClient executionclient.Provider,
validatorCtrl validator.Controller,
validatorCtrl *validator.Controller,
networkConfig *networkconfig.Network,
nodeStorage operatorstorage.Storage,
operatorDataStore operatordatastore.OperatorDataStore,
Expand Down
12 changes: 6 additions & 6 deletions eth/ethtest/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ import (
"go.uber.org/mock/gomock"
"go.uber.org/zap/zaptest"

"github.com/ssvlabs/ssv/eth/eventhandler/mocks"
"github.com/ssvlabs/ssv/eth/eventsyncer"
"github.com/ssvlabs/ssv/eth/executionclient"
"github.com/ssvlabs/ssv/eth/simulator"
"github.com/ssvlabs/ssv/eth/simulator/simcontract"
"github.com/ssvlabs/ssv/operator/storage"
"github.com/ssvlabs/ssv/operator/validator/mocks"
)

type CommonTestInput struct {
Expand Down Expand Up @@ -62,7 +62,7 @@ type TestEnv struct {
execClient *executionclient.ExecutionClient
rpcServer *rpc.Server
httpSrv *httptest.Server
validatorCtrl *mocks.MockController
taskExecutor *mocks.MockTaskExecutor
mockCtrl *gomock.Controller
followDistance *uint64
}
Expand Down Expand Up @@ -116,15 +116,15 @@ func (e *TestEnv) setup(
}
}

eh, validatorCtrl, mockCtrl, nodeStorage, err := setupEventHandler(t, ctx, logger, ops[0], &testAddrAlice, true)
eh, taskExecutor, mockCtrl, nodeStorage, err := setupEventHandler(t, ctx, logger, ops[0], &testAddrAlice, true)
e.mockCtrl = mockCtrl
e.nodeStorage = nodeStorage

if err != nil {
return err
}
if validatorCtrl == nil {
return fmt.Errorf("validatorCtrl is empty")
if taskExecutor == nil {
return fmt.Errorf("taskExecutor is empty")
}

// Adding testAddresses to the genesis block mostly to specify some balances for them
Expand Down Expand Up @@ -196,7 +196,7 @@ func (e *TestEnv) setup(
eventsyncer.WithLogger(logger),
)

e.validatorCtrl = validatorCtrl
e.taskExecutor = taskExecutor
e.sim = sim
e.auth = auth
e.validators = validators
Expand Down
12 changes: 6 additions & 6 deletions eth/ethtest/eth_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestEthExecLayer(t *testing.T) {
validators = testEnv.validators
eventSyncer = testEnv.eventSyncer
shares = testEnv.shares
validatorCtrl = testEnv.validatorCtrl
taskExecutor = testEnv.taskExecutor
)

blockNum := uint64(0x1)
Expand Down Expand Up @@ -171,7 +171,7 @@ func TestEthExecLayer(t *testing.T) {

// Step 2: Exit validator
{
validatorCtrl.EXPECT().ExitValidator(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
taskExecutor.EXPECT().ExitValidator(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

shares := nodeStorage.Shares().List(nil)
require.Equal(t, 7, len(shares))
Expand All @@ -196,7 +196,7 @@ func TestEthExecLayer(t *testing.T) {

// Step 3: Remove validator
{
validatorCtrl.EXPECT().StopValidator(gomock.Any()).AnyTimes()
taskExecutor.EXPECT().StopValidator(gomock.Any()).AnyTimes()

shares := nodeStorage.Shares().List(nil)
require.Equal(t, 7, len(shares))
Expand Down Expand Up @@ -228,7 +228,7 @@ func TestEthExecLayer(t *testing.T) {

// Step 4 Liquidate Cluster
{
validatorCtrl.EXPECT().LiquidateCluster(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
taskExecutor.EXPECT().LiquidateCluster(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

clusterLiquidate := NewTestClusterLiquidatedInput(common)
clusterLiquidate.prepare([]*ClusterLiquidatedEventInput{
Expand Down Expand Up @@ -258,7 +258,7 @@ func TestEthExecLayer(t *testing.T) {

// Step 5 Reactivate Cluster
{
validatorCtrl.EXPECT().ReactivateCluster(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
taskExecutor.EXPECT().ReactivateCluster(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()

clusterID := ssvtypes.ComputeClusterIDHash(testAddrAlice, []uint64{1, 2, 3, 4})

Expand Down Expand Up @@ -310,7 +310,7 @@ func TestEthExecLayer(t *testing.T) {

// Step 7 Update Fee Recipient
{
validatorCtrl.EXPECT().UpdateFeeRecipient(gomock.Any(), gomock.Any(), gomock.Any()).Times(1)
taskExecutor.EXPECT().UpdateFeeRecipient(gomock.Any(), gomock.Any(), gomock.Any()).Times(1)

setFeeRecipient := NewSetFeeRecipientAddressInput(common)
setFeeRecipient.prepare([]*SetFeeRecipientAddressEventInput{
Expand Down
10 changes: 5 additions & 5 deletions eth/ethtest/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"github.com/ssvlabs/ssv/doppelganger"
"github.com/ssvlabs/ssv/eth/contract"
"github.com/ssvlabs/ssv/eth/eventhandler"
"github.com/ssvlabs/ssv/eth/eventhandler/mocks"
"github.com/ssvlabs/ssv/eth/eventparser"
"github.com/ssvlabs/ssv/eth/simulator"
"github.com/ssvlabs/ssv/exporter"
Expand All @@ -29,7 +30,6 @@ import (
operatordatastore "github.com/ssvlabs/ssv/operator/datastore"
operatorstorage "github.com/ssvlabs/ssv/operator/storage"
"github.com/ssvlabs/ssv/operator/validator"
"github.com/ssvlabs/ssv/operator/validator/mocks"
registrystorage "github.com/ssvlabs/ssv/registry/storage"
kv "github.com/ssvlabs/ssv/storage/badger"
"github.com/ssvlabs/ssv/storage/basedb"
Expand Down Expand Up @@ -152,7 +152,7 @@ func setupEventHandler(
operator *testOperator,
ownerAddress *ethcommon.Address,
useMockCtrl bool,
) (*eventhandler.EventHandler, *mocks.MockController, *gomock.Controller, operatorstorage.Storage, error) {
) (*eventhandler.EventHandler, *mocks.MockTaskExecutor, *gomock.Controller, operatorstorage.Storage, error) {
db, err := kv.NewInMemory(logger, basedb.Options{
Ctx: ctx,
})
Expand Down Expand Up @@ -180,14 +180,14 @@ func setupEventHandler(
dgHandler := doppelganger.NoOpHandler{}

if useMockCtrl {
validatorCtrl := mocks.NewMockController(ctrl)
tExecutor := mocks.NewMockTaskExecutor(ctrl)

parser := eventparser.New(contractFilterer)

eh, err := eventhandler.New(
nodeStorage,
parser,
validatorCtrl,
tExecutor,
testNetworkConfig,
operatorDataStore,
operator.privateKey,
Expand All @@ -201,7 +201,7 @@ func setupEventHandler(
return nil, nil, nil, nil, err
}

return eh, validatorCtrl, ctrl, nodeStorage, nil
return eh, tExecutor, ctrl, nodeStorage, nil
}

validatorCtrl := validator.NewController(logger, validator.ControllerOptions{
Expand Down
2 changes: 1 addition & 1 deletion eth/eventhandler/event_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (
"github.com/ssvlabs/ssv/storage/basedb"
)

// Event names
// Ethereum SSV network contract event names.
const (
OperatorAdded = "OperatorAdded"
OperatorRemoved = "OperatorRemoved"
Expand Down
10 changes: 5 additions & 5 deletions eth/eventhandler/event_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/ssvlabs/ssv/beacon/goclient"
"github.com/ssvlabs/ssv/doppelganger"
"github.com/ssvlabs/ssv/eth/contract"
"github.com/ssvlabs/ssv/eth/eventhandler/mocks"
"github.com/ssvlabs/ssv/eth/eventparser"
"github.com/ssvlabs/ssv/eth/executionclient"
"github.com/ssvlabs/ssv/eth/simulator"
Expand All @@ -42,7 +43,6 @@ import (
operatordatastore "github.com/ssvlabs/ssv/operator/datastore"
operatorstorage "github.com/ssvlabs/ssv/operator/storage"
"github.com/ssvlabs/ssv/operator/validator"
"github.com/ssvlabs/ssv/operator/validator/mocks"
"github.com/ssvlabs/ssv/operator/validators"
registrystorage "github.com/ssvlabs/ssv/registry/storage"
kv "github.com/ssvlabs/ssv/storage/badger"
Expand Down Expand Up @@ -1359,7 +1359,7 @@ func setupEventHandler(
network *networkconfig.Network,
operator *testOperator,
useMockCtrl bool,
) (*EventHandler, *mocks.MockController, error) {
) (*EventHandler, *mocks.MockTaskExecutor, error) {
db, err := kv.NewInMemory(logger, basedb.Options{
Ctx: ctx,
})
Expand All @@ -1381,7 +1381,7 @@ func setupEventHandler(
ctrl := gomock.NewController(t)
defer ctrl.Finish()

validatorCtrl := mocks.NewMockController(ctrl)
tExecutor := mocks.NewMockTaskExecutor(ctrl)

contractFilterer, err := contract.NewContractFilterer(ethcommon.Address{}, nil)
require.NoError(t, err)
Expand All @@ -1391,7 +1391,7 @@ func setupEventHandler(
eh, err := New(
nodeStorage,
parser,
validatorCtrl,
tExecutor,
network,
operatorDataStore,
operator.privateKey,
Expand All @@ -1404,7 +1404,7 @@ func setupEventHandler(
return nil, nil, err
}

return eh, validatorCtrl, nil
return eh, tExecutor, nil
}

validatorCtrl := validator.NewController(logger, validator.ControllerOptions{
Expand Down
8 changes: 8 additions & 0 deletions eth/eventhandler/mockgen.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package eventhandler

//go:generate go tool -modfile=../../tool.mod mockgen -package=mocks -destination=./mocks/task_executor.go github.com/ssvlabs/ssv/eth/eventhandler TaskExecutor

// TaskExecutor adapts package-private interface for mockgen to generate properly capitalized mock-name.
// The mockgen.go cannot be a mockgen_test.go for mockgen to work (if we want Golang to ignore mockgen.go file
// during builds, we probably need to do it with build-tags).
type TaskExecutor = taskExecutor
114 changes: 114 additions & 0 deletions eth/eventhandler/mocks/task_executor.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions operator/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ type Options struct {
P2PNetwork network.P2PNetwork
Context context.Context
DB basedb.Database
ValidatorController validator.Controller
ValidatorController *validator.Controller
ValidatorStore storage2.ValidatorStore
ValidatorOptions validator.ControllerOptions `yaml:"ValidatorOptions"`
DutyStore *dutystore.Store
Expand All @@ -48,7 +48,7 @@ type Node struct {
logger *zap.Logger
network *networkconfig.Network
context context.Context
validatorsCtrl validator.Controller
validatorsCtrl *validator.Controller
validatorOptions validator.ControllerOptions
exporterOptions exporter.Options
consensusClient beaconprotocol.BeaconNode
Expand Down
Loading