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 }