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)