github.com/ethereum-optimism/optimism@v1.7.2/op-node/p2p/store/extended.go (about) 1 package store 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "time" 8 9 "github.com/ethereum-optimism/optimism/op-service/clock" 10 "github.com/ethereum/go-ethereum/log" 11 ds "github.com/ipfs/go-datastore" 12 "github.com/libp2p/go-libp2p/core/peerstore" 13 ) 14 15 type extendedStore struct { 16 peerstore.Peerstore 17 peerstore.CertifiedAddrBook 18 *scoreBook 19 *peerBanBook 20 *ipBanBook 21 *metadataBook 22 } 23 24 func NewExtendedPeerstore(ctx context.Context, logger log.Logger, clock clock.Clock, ps peerstore.Peerstore, store ds.Batching, scoreRetention time.Duration) (ExtendedPeerstore, error) { 25 cab, ok := peerstore.GetCertifiedAddrBook(ps) 26 if !ok { 27 return nil, errors.New("peerstore should also be a certified address book") 28 } 29 sb, err := newScoreBook(ctx, logger, clock, store, scoreRetention) 30 if err != nil { 31 return nil, fmt.Errorf("create scorebook: %w", err) 32 } 33 sb.startGC() 34 pb, err := newPeerBanBook(ctx, logger, clock, store) 35 if err != nil { 36 return nil, fmt.Errorf("create peer ban book: %w", err) 37 } 38 pb.startGC() 39 ib, err := newIPBanBook(ctx, logger, clock, store) 40 if err != nil { 41 return nil, fmt.Errorf("create IP ban book: %w", err) 42 } 43 ib.startGC() 44 md, err := newMetadataBook(ctx, logger, clock, store) 45 if err != nil { 46 return nil, fmt.Errorf("create metadata book: %w", err) 47 } 48 md.startGC() 49 return &extendedStore{ 50 Peerstore: ps, 51 CertifiedAddrBook: cab, 52 scoreBook: sb, 53 peerBanBook: pb, 54 ipBanBook: ib, 55 metadataBook: md, 56 }, nil 57 } 58 59 func (s *extendedStore) Close() error { 60 s.scoreBook.Close() 61 s.peerBanBook.Close() 62 s.ipBanBook.Close() 63 s.metadataBook.Close() 64 return s.Peerstore.Close() 65 } 66 67 var _ ExtendedPeerstore = (*extendedStore)(nil)