github.com/baptiste-b-pegasys/quorum/v22@v22.4.2/core/default_psm.go (about)

     1  package core
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/ethereum/go-ethereum/common"
     7  	"github.com/ethereum/go-ethereum/core/mps"
     8  	"github.com/ethereum/go-ethereum/core/privatecache"
     9  	"github.com/ethereum/go-ethereum/core/rawdb"
    10  	"github.com/ethereum/go-ethereum/core/state"
    11  	"github.com/ethereum/go-ethereum/core/types"
    12  	"github.com/ethereum/go-ethereum/ethdb"
    13  	"github.com/ethereum/go-ethereum/rpc"
    14  	"github.com/ethereum/go-ethereum/trie"
    15  )
    16  
    17  type DefaultPrivateStateManager struct {
    18  	// Low level persistent database to store final content in
    19  	db                   ethdb.Database
    20  	repoCache            state.Database
    21  	privateCacheProvider privatecache.Provider
    22  }
    23  
    24  func newDefaultPrivateStateManager(db ethdb.Database, privateCacheProvider privatecache.Provider) *DefaultPrivateStateManager {
    25  	return &DefaultPrivateStateManager{
    26  		db:                   db,
    27  		repoCache:            privateCacheProvider.GetCacheWithConfig(),
    28  		privateCacheProvider: privateCacheProvider,
    29  	}
    30  }
    31  
    32  func (d *DefaultPrivateStateManager) StateRepository(blockHash common.Hash) (mps.PrivateStateRepository, error) {
    33  	return mps.NewDefaultPrivateStateRepository(d.db, d.repoCache, d.privateCacheProvider, blockHash)
    34  }
    35  
    36  func (d *DefaultPrivateStateManager) ResolveForManagedParty(_ string) (*mps.PrivateStateMetadata, error) {
    37  	return mps.DefaultPrivateStateMetadata, nil
    38  }
    39  
    40  func (d *DefaultPrivateStateManager) ResolveForUserContext(ctx context.Context) (*mps.PrivateStateMetadata, error) {
    41  	psi, ok := rpc.PrivateStateIdentifierFromContext(ctx)
    42  	if !ok {
    43  		psi = types.DefaultPrivateStateIdentifier
    44  	}
    45  	return &mps.PrivateStateMetadata{ID: psi, Type: mps.Resident}, nil
    46  }
    47  
    48  func (d *DefaultPrivateStateManager) PSIs() []types.PrivateStateIdentifier {
    49  	return []types.PrivateStateIdentifier{
    50  		types.DefaultPrivateStateIdentifier,
    51  	}
    52  }
    53  
    54  func (d *DefaultPrivateStateManager) NotIncludeAny(_ *mps.PrivateStateMetadata, _ ...string) bool {
    55  	// with default implementation, all managedParties are members of the psm
    56  	return false
    57  }
    58  
    59  func (d *DefaultPrivateStateManager) CheckAt(root common.Hash) error {
    60  	_, err := state.New(rawdb.GetPrivateStateRoot(d.db, root), d.repoCache, nil)
    61  	return err
    62  }
    63  
    64  func (d *DefaultPrivateStateManager) TrieDB() *trie.Database {
    65  	return d.repoCache.TrieDB()
    66  }