Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
56 changes: 25 additions & 31 deletions p2p/pkg/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import (
providerapi "github.com/primev/mev-commit/p2p/pkg/rpc/provider"
validatorapi "github.com/primev/mev-commit/p2p/pkg/rpc/validator"
"github.com/primev/mev-commit/p2p/pkg/signer"
"github.com/primev/mev-commit/p2p/pkg/stakemanager"
"github.com/primev/mev-commit/p2p/pkg/storage"
inmem "github.com/primev/mev-commit/p2p/pkg/storage/inmem"
pebblestorage "github.com/primev/mev-commit/p2p/pkg/storage/pebble"
Expand Down Expand Up @@ -316,14 +317,31 @@ func NewNode(opts *Options) (*Node, error) {

keysStore := keysstore.New(store)

p2pSvc, err := libp2p.New(&libp2p.Options{
KeySigner: opts.KeySigner,
Secret: opts.Secret,
PeerType: peerType,
Register: &providerStakeChecker{
providerRegistry: providerRegistry,
from: opts.KeySigner.GetAddress(),
stakeMgr, err := stakemanager.NewStakeManager(
opts.Logger.With("component", "stakemanager"),
opts.KeySigner.GetAddress(),
evtMgr,
providerRegistry,
notificationsSvc,
)
if err != nil {
opts.Logger.Error("failed to create stake manager", "error", err)
return nil, errors.Join(err, nd.Close())
}

startables = append(
startables,
StartableObjWithDesc{
Desc: "stakemanager",
Startable: stakeMgr,
},
)

p2pSvc, err := libp2p.New(&libp2p.Options{
KeySigner: opts.KeySigner,
Secret: opts.Secret,
PeerType: peerType,
Register: stakeMgr,
Store: keysStore,
Logger: opts.Logger.With("component", "p2p"),
ListenPort: opts.P2PPort,
Expand Down Expand Up @@ -957,30 +975,6 @@ func (f StartableFunc) Start(ctx context.Context) <-chan struct{} {
return f(ctx)
}

type providerStakeChecker struct {
providerRegistry *providerregistry.Providerregistry
from common.Address
}

func (p *providerStakeChecker) CheckProviderRegistered(ctx context.Context, provider common.Address) bool {
callOpts := &bind.CallOpts{
From: p.from,
Context: ctx,
}

minStake, err := p.providerRegistry.MinStake(callOpts)
if err != nil {
return false
}

stake, err := p.providerRegistry.GetProviderStake(callOpts, provider)
if err != nil {
return false
}

return stake.Cmp(minStake) >= 0
}

type progressStore struct {
contractRPC *ethclient.Client
lastBlock atomic.Uint64
Expand Down
4 changes: 4 additions & 0 deletions p2p/pkg/notifications/notifications.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ const (
TopicPeerDisconnected Topic = "peer_disconnected"
TopicValidatorOptedIn Topic = "validator_opted_in"
TopicEpochValidatorsOptedIn Topic = "epoch_validators_opted_in"
TopicProviderRegistered Topic = "provider_registered"
TopicProviderDeposit Topic = "provider_deposit"
TopicProviderSlashed Topic = "provider_slashed"
TopicProviderDeregistered Topic = "provider_deregistered"
)

func IsTopicValid(topic Topic) bool {
Expand Down
Loading
Loading