services_factory.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package extension
  2. import (
  3. "context"
  4. "github.com/ethereum/go-ethereum/accounts"
  5. "github.com/ethereum/go-ethereum/eth"
  6. "github.com/ethereum/go-ethereum/extension/privacyExtension"
  7. "github.com/ethereum/go-ethereum/node"
  8. "github.com/ethereum/go-ethereum/private"
  9. )
  10. type ServicesFactory interface {
  11. AccountManager() *accounts.Manager
  12. DataHandler() DataHandler
  13. StateFetcher() *StateFetcher
  14. }
  15. type DefaultServicesFactory struct {
  16. backendService *PrivacyService
  17. accountManager *accounts.Manager
  18. dataHandler *JsonFileDataHandler
  19. stateFetcher *StateFetcher
  20. }
  21. func NewServicesFactory(stack *node.Node, ptm private.PrivateTransactionManager, ethService *eth.Ethereum) (*DefaultServicesFactory, error) {
  22. factory := &DefaultServicesFactory{}
  23. factory.accountManager = ethService.AccountManager()
  24. factory.dataHandler = NewJsonFileDataHandler(stack.InstanceDir())
  25. factory.stateFetcher = NewStateFetcher(ethService.BlockChain())
  26. backendService, err := New(stack, ptm, factory.AccountManager(), factory.DataHandler(), factory.StateFetcher(), ethService.APIBackend, ethService.BlockChain().Config())
  27. if err != nil {
  28. return nil, err
  29. }
  30. factory.backendService = backendService
  31. isMultitenant := ethService.BlockChain().SupportsMultitenancy(context.Background())
  32. privacyExtension.DefaultExtensionHandler.SupportMultitenancy(isMultitenant)
  33. privacyExtension.DefaultExtensionHandler.SetPSMR(ethService.BlockChain().PrivateStateManager())
  34. ethService.BlockChain().PopulateSetPrivateState(privacyExtension.DefaultExtensionHandler.CheckExtensionAndSetPrivateState)
  35. return factory, nil
  36. }
  37. func (factory *DefaultServicesFactory) AccountManager() *accounts.Manager {
  38. return factory.accountManager
  39. }
  40. func (factory *DefaultServicesFactory) DataHandler() DataHandler {
  41. return factory.dataHandler
  42. }
  43. func (factory *DefaultServicesFactory) StateFetcher() *StateFetcher {
  44. return factory.stateFetcher
  45. }