default_psm.go 2.2 KB

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