diff --git a/README.md b/README.md index 5967add5..9262d6c1 100644 --- a/README.md +++ b/README.md @@ -82,11 +82,6 @@ Please note that `altered-accounts` endpoints will only work if the backing obse - `/v1.0/blocks/by-round/:round` (GET) --> returns all blocks by round -### block-atlas - -- `/v1.0/block-atlas/:shard/:nonce` (GET) --> returns a block by nonce, as required by Block Atlas - - ### hyperblock - `/v1.0/hyperblock/by-nonce/:nonce` (GET) --> returns a hyperblock by nonce, with transactions included diff --git a/api/apiHandler.go b/api/apiHandler.go index 87a275aa..4035f8dc 100644 --- a/api/apiHandler.go +++ b/api/apiHandler.go @@ -49,11 +49,6 @@ func initBaseGroupsWithFacade(facade data.FacadeHandler) (map[string]data.GroupH return nil, err } - blockAtlasGroup, err := groups.NewBlockAtlasGroup(facade) - if err != nil { - return nil, err - } - hyperBlocksGroup, err := groups.NewHyperBlockGroup(facade) if err != nil { return nil, err @@ -110,7 +105,6 @@ func initBaseGroupsWithFacade(facade data.FacadeHandler) (map[string]data.GroupH "/block": blockGroup, "/blocks": blocksGroup, "/internal": internalGroup, - "/block-atlas": blockAtlasGroup, "/hyperblock": hyperBlocksGroup, "/network": networkGroup, "/node": nodeGroup, diff --git a/api/groups/baseBlockAtlasGroup.go b/api/groups/baseBlockAtlasGroup.go deleted file mode 100644 index 6cdd40f0..00000000 --- a/api/groups/baseBlockAtlasGroup.go +++ /dev/null @@ -1,58 +0,0 @@ -package groups - -import ( - "net/http" - - "github.com/gin-gonic/gin" - apiErrors "github.com/multiversx/mx-chain-proxy-go/api/errors" - "github.com/multiversx/mx-chain-proxy-go/api/shared" - "github.com/multiversx/mx-chain-proxy-go/data" -) - -type blockAtlasGroup struct { - facade BlockAtlasFacadeHandler - *baseGroup -} - -// NewBlockAtlasGroup returns a new instance of blockAtlasGroup -func NewBlockAtlasGroup(facadeHandler data.FacadeHandler) (*blockAtlasGroup, error) { - facade, ok := facadeHandler.(BlockAtlasFacadeHandler) - if !ok { - return nil, ErrWrongTypeAssertion - } - - bag := &blockAtlasGroup{ - facade: facade, - baseGroup: &baseGroup{}, - } - - baseRoutesHandlers := []*data.EndpointHandlerData{ - {Path: "/:shard/:nonce", Handler: bag.getBlockByShardIDAndNonceFromElastic, Method: http.MethodGet}, - } - bag.baseGroup.endpoints = baseRoutesHandlers - - return bag, nil -} - -// getBlockByShardIDAndNonceFromElastic returns the block by shardID and nonce -func (group *blockAtlasGroup) getBlockByShardIDAndNonceFromElastic(c *gin.Context) { - shardID, err := shared.FetchShardIDFromRequest(c) - if err != nil { - shared.RespondWith(c, http.StatusBadRequest, nil, apiErrors.ErrCannotParseShardID.Error(), data.ReturnCodeRequestError) - return - } - - nonce, err := shared.FetchNonceFromRequest(c) - if err != nil { - shared.RespondWith(c, http.StatusBadRequest, nil, apiErrors.ErrCannotParseNonce.Error(), data.ReturnCodeRequestError) - return - } - - apiBlock, err := group.facade.GetAtlasBlockByShardIDAndNonce(shardID, nonce) - if err != nil { - shared.RespondWith(c, http.StatusInternalServerError, nil, err.Error(), data.ReturnCodeInternalError) - return - } - - shared.RespondWith(c, http.StatusOK, gin.H{"block": apiBlock}, "", data.ReturnCodeSuccess) -} diff --git a/api/groups/baseBlockAtlasGroup_test.go b/api/groups/baseBlockAtlasGroup_test.go deleted file mode 100644 index efb8c6e9..00000000 --- a/api/groups/baseBlockAtlasGroup_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package groups_test - -import ( - "errors" - "net/http" - "net/http/httptest" - "testing" - - apiErrors "github.com/multiversx/mx-chain-proxy-go/api/errors" - "github.com/multiversx/mx-chain-proxy-go/api/groups" - "github.com/multiversx/mx-chain-proxy-go/api/mock" - "github.com/multiversx/mx-chain-proxy-go/data" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -const blockAtlasPath = "/blockatlas" - -type blockResponseData struct { - Block data.AtlasBlock `json:"block"` -} - -type blockResponse struct { - Data blockResponseData `json:"data"` - Error string `json:"error"` - Code string `json:"code"` -} - -func TestNewBlockAtlasGroup_WrongFacadeShouldErr(t *testing.T) { - wrongFacade := &mock.WrongFacade{} - group, err := groups.NewBlockAtlasGroup(wrongFacade) - require.Nil(t, group) - require.Equal(t, groups.ErrWrongTypeAssertion, err) -} - -func TestGetBlockByShardIDAndNonceFromElastic_FailWhenShardParamIsInvalid(t *testing.T) { - t.Parallel() - - facade := &mock.FacadeStub{} - - baseBlockAtlasGroup, err := groups.NewBlockAtlasGroup(facade) - require.NoError(t, err) - ws := startProxyServer(baseBlockAtlasGroup, blockAtlasPath) - - req, _ := http.NewRequest("GET", "/blockatlas/invalid_shard_id/1", nil) - resp := httptest.NewRecorder() - ws.ServeHTTP(resp, req) - - apiResp := data.GenericAPIResponse{} - loadResponse(resp.Body, &apiResp) - - assert.Equal(t, http.StatusBadRequest, resp.Code) - assert.Empty(t, apiResp.Data) - assert.Equal(t, apiErrors.ErrCannotParseShardID.Error(), apiResp.Error) -} - -func TestGetBlockByShardIDAndNonceFromElastic_FailWhenNonceParamIsInvalid(t *testing.T) { - t.Parallel() - - facade := &mock.FacadeStub{} - baseBlockAtlasGroup, err := groups.NewBlockAtlasGroup(facade) - require.NoError(t, err) - ws := startProxyServer(baseBlockAtlasGroup, blockAtlasPath) - - req, _ := http.NewRequest("GET", "/blockatlas/0/invalid_nonce", nil) - resp := httptest.NewRecorder() - ws.ServeHTTP(resp, req) - - apiResp := data.GenericAPIResponse{} - loadResponse(resp.Body, &apiResp) - - assert.Equal(t, http.StatusBadRequest, resp.Code) - assert.Empty(t, apiResp.Data) - assert.Equal(t, apiErrors.ErrCannotParseNonce.Error(), apiResp.Error) -} - -func TestGetBlockByShardIDAndNonceFromElastic_FailWhenFacadeGetAccountFails(t *testing.T) { - t.Parallel() - - returnedError := errors.New("i am an error") - facade := &mock.FacadeStub{ - GetBlockByShardIDAndNonceHandler: func(_ uint32, _ uint64) (data.AtlasBlock, error) { - return data.AtlasBlock{}, returnedError - }, - } - baseBlockAtlasGroup, err := groups.NewBlockAtlasGroup(facade) - require.NoError(t, err) - ws := startProxyServer(baseBlockAtlasGroup, blockAtlasPath) - - req, _ := http.NewRequest("GET", "/blockatlas/0/1", nil) - resp := httptest.NewRecorder() - ws.ServeHTTP(resp, req) - - apiResp := data.GenericAPIResponse{} - loadResponse(resp.Body, &apiResp) - - assert.Equal(t, http.StatusInternalServerError, resp.Code) - assert.Empty(t, apiResp.Data) - assert.Equal(t, returnedError.Error(), apiResp.Error) -} - -func TestGetBlockByShardIDAndNonceFromElastic_ReturnsSuccessfully(t *testing.T) { - t.Parallel() - - nonce := uint64(37) - hash := "hashhh" - facade := &mock.FacadeStub{ - GetBlockByShardIDAndNonceHandler: func(_ uint32, _ uint64) (data.AtlasBlock, error) { - return data.AtlasBlock{ - Nonce: nonce, - Hash: hash, - }, nil - }, - } - - baseBlockAtlasGroup, err := groups.NewBlockAtlasGroup(facade) - require.NoError(t, err) - ws := startProxyServer(baseBlockAtlasGroup, blockAtlasPath) - - req, _ := http.NewRequest("GET", "/blockatlas/0/1", nil) - resp := httptest.NewRecorder() - ws.ServeHTTP(resp, req) - - apiResp := blockResponse{} - loadResponse(resp.Body, &apiResp) - - assert.Equal(t, http.StatusOK, resp.Code) - assert.Equal(t, apiResp.Data.Block.Nonce, nonce) - assert.Equal(t, apiResp.Data.Block.Hash, hash) - assert.Empty(t, apiResp.Error) - assert.Equal(t, string(data.ReturnCodeSuccess), apiResp.Code) -} diff --git a/api/groups/baseBlockGroup_test.go b/api/groups/baseBlockGroup_test.go index 9e6c17eb..9d0e9b67 100644 --- a/api/groups/baseBlockGroup_test.go +++ b/api/groups/baseBlockGroup_test.go @@ -138,7 +138,7 @@ func TestGetBlockByNonce_ReturnsSuccessfully(t *testing.T) { resp := httptest.NewRecorder() ws.ServeHTTP(resp, req) - apiResp := blockResponse{} + apiResp := data.BlockApiResponse{} loadResponse(resp.Body, &apiResp) assert.Equal(t, http.StatusOK, resp.Code) @@ -258,7 +258,7 @@ func TestGetBlockByHash_ReturnsSuccessfully(t *testing.T) { resp := httptest.NewRecorder() ws.ServeHTTP(resp, req) - apiResp := blockResponse{} + apiResp := data.BlockApiResponse{} loadResponse(resp.Body, &apiResp) assert.Equal(t, http.StatusOK, resp.Code) diff --git a/api/groups/interface.go b/api/groups/interface.go index c97a076b..f5a4e4fd 100644 --- a/api/groups/interface.go +++ b/api/groups/interface.go @@ -49,11 +49,6 @@ type InternalFacadeHandler interface { GetInternalStartOfEpochValidatorsInfo(epoch uint32) (*data.ValidatorsInfoApiResponse, error) } -// BlockAtlasFacadeHandler interface defines methods that can be used from facade context variable -type BlockAtlasFacadeHandler interface { - GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) -} - // HyperBlockFacadeHandler defines the actions needed for fetching the hyperblocks from the nodes type HyperBlockFacadeHandler interface { GetHyperBlockByNonce(nonce uint64, options common.HyperblockQueryOptions) (*data.HyperblockApiResponse, error) diff --git a/api/mock/facadeStub.go b/api/mock/facadeStub.go index 27888b72..66417554 100644 --- a/api/mock/facadeStub.go +++ b/api/mock/facadeStub.go @@ -49,7 +49,6 @@ type FacadeStub struct { GetDirectStakedInfoCalled func() (*data.GenericAPIResponse, error) GetDelegatedInfoCalled func() (*data.GenericAPIResponse, error) GetRatingsConfigCalled func() (*data.GenericAPIResponse, error) - GetBlockByShardIDAndNonceHandler func(shardID uint32, nonce uint64) (data.AtlasBlock, error) GetTransactionByHashAndSenderAddressHandler func(txHash string, sndAddr string, withResults bool) (*transaction.ApiTransactionResult, int, error) GetBlockByHashCalled func(shardID uint32, hash string, options common.BlockQueryOptions) (*data.BlockApiResponse, error) GetBlockByNonceCalled func(shardID uint32, nonce uint64, options common.BlockQueryOptions) (*data.BlockApiResponse, error) @@ -443,11 +442,6 @@ func (f *FacadeStub) GetHeartbeatData() (*data.HeartbeatResponse, error) { return f.GetHeartbeatDataHandler() } -// GetAtlasBlockByShardIDAndNonce - -func (f *FacadeStub) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - return f.GetBlockByShardIDAndNonceHandler(shardID, nonce) -} - // GetBlockByHash - func (f *FacadeStub) GetBlockByHash(shardID uint32, hash string, options common.BlockQueryOptions) (*data.BlockApiResponse, error) { return f.GetBlockByHashCalled(shardID, hash, options) diff --git a/cmd/proxy/config/apiConfig/v1_0.toml b/cmd/proxy/config/apiConfig/v1_0.toml index 6bfd4d85..f90ee4ae 100644 --- a/cmd/proxy/config/apiConfig/v1_0.toml +++ b/cmd/proxy/config/apiConfig/v1_0.toml @@ -115,11 +115,6 @@ Routes = [ { Name = "/by-round/:round", Secured = false, Open = true, RateLimit = 0 }, ] -[APIPackages.block-atlas] -Routes = [ - { Name = "/:shard/:nonce", Secured = false, Open = true, RateLimit = 0 } -] - [APIPackages.proof] Routes = [ { Name = "/root-hash/:roothash/address/:address", Secured = false, Open = false, RateLimit = 0 }, diff --git a/cmd/proxy/config/apiConfig/v_next.toml b/cmd/proxy/config/apiConfig/v_next.toml index 8fdb4dd1..fbb7c733 100644 --- a/cmd/proxy/config/apiConfig/v_next.toml +++ b/cmd/proxy/config/apiConfig/v_next.toml @@ -115,11 +115,6 @@ Routes = [ { Name = "/by-round/:round", Secured = false, Open = true, RateLimit = 0 }, ] -[APIPackages.block-atlas] -Routes = [ - { Name = "/:shard/:nonce", Secured = false, Open = true, RateLimit = 0 } -] - [APIPackages.proof] Routes = [ { Name = "/root-hash/:roothash/address/:address", Secured = false, Open = false, RateLimit = 0 }, diff --git a/cmd/proxy/config/external.toml b/cmd/proxy/config/external.toml deleted file mode 100644 index 9bc54b1a..00000000 --- a/cmd/proxy/config/external.toml +++ /dev/null @@ -1,4 +0,0 @@ -# ElasticSearchConnector defines settings related to ElasticSearch such as login information or URL -[ElasticSearchConnector] - Enabled = false - URL = "" diff --git a/cmd/proxy/config/swagger/openapi.json b/cmd/proxy/config/swagger/openapi.json index 75f33e76..8d3b7497 100644 --- a/cmd/proxy/config/swagger/openapi.json +++ b/cmd/proxy/config/swagger/openapi.json @@ -574,86 +574,6 @@ } } }, - "/block-atlas/{shard}/{nonce}": { - "get": { - "tags": [ - "block-atlas" - ], - "summary": "get a block from a specified shard and at a specified nonce", - "parameters": [ - { - "name": "shard", - "in": "path", - "description": "the shard ID to look after", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "name": "nonce", - "in": "path", - "description": "the nonce to look after", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenericResponse" - } - } - } - } - } - } - }, - "/block-atlas/{shard}/by-hash/{hash}": { - "get": { - "tags": [ - "block" - ], - "summary": "get a block from a specified shard and with a specified hash", - "parameters": [ - { - "name": "shard", - "in": "path", - "description": "the shard ID to look after", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "name": "hash", - "in": "path", - "description": "the hash to look after", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GenericResponse" - } - } - } - } - } - } - }, "/blocks/by-round/{round}": { "get": { "tags": [ @@ -704,7 +624,7 @@ { "name": "nonce", "in": "path", - "description": "the hash to look after", + "description": "the nonce to look after", "required": true, "schema": { "type": "integer" @@ -735,7 +655,7 @@ { "name": "nonce", "in": "path", - "description": "the hash to look after", + "description": "the nonce to look after", "required": true, "schema": { "type": "integer" diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go index d32470a1..2e1b1af2 100644 --- a/cmd/proxy/main.go +++ b/cmd/proxy/main.go @@ -27,7 +27,6 @@ import ( "github.com/multiversx/mx-chain-proxy-go/observer" "github.com/multiversx/mx-chain-proxy-go/process" "github.com/multiversx/mx-chain-proxy-go/process/cache" - "github.com/multiversx/mx-chain-proxy-go/process/database" processFactory "github.com/multiversx/mx-chain-proxy-go/process/factory" "github.com/multiversx/mx-chain-proxy-go/testing" versionsFactory "github.com/multiversx/mx-chain-proxy-go/versions/factory" @@ -105,13 +104,6 @@ VERSION: Usage: "This represents the path of the walletKey.pem file", Value: "./config/walletKey.pem", } - // externalConfigFile defines a flag for the path to the external toml configuration file - externalConfigFile = cli.StringFlag{ - Name: "config-external", - Usage: "The path for the external configuration file. This TOML file contains" + - " external configurations such as ElasticSearch's URL and login information", - Value: "./config/external.toml", - } // credentialsConfigFile defines a flag for the path to the credentials toml configuration file credentialsConfigFile = cli.StringFlag{ @@ -182,7 +174,6 @@ func main() { app.Usage = "This is the entry point for starting a new Multiversx node proxy" app.Flags = []cli.Flag{ configurationFile, - externalConfigFile, credentialsConfigFile, apiConfigDirectory, profileMode, @@ -271,12 +262,6 @@ func startProxy(ctx *cli.Context) error { } log.Info(fmt.Sprintf("Initialized with main config from: %s", configurationFile)) - externalConfigurationFileName := ctx.GlobalString(externalConfigFile.Name) - externalConfig, err := loadExternalConfig(externalConfigurationFileName) - if err != nil { - return err - } - closableComponents := data.NewClosableComponentsHandler() credentialsConfigurationFileName := ctx.GlobalString(credentialsConfigFile.Name) @@ -288,7 +273,7 @@ func startProxy(ctx *cli.Context) error { statusMetricsProvider := metrics.NewStatusMetrics() shouldStartSwaggerUI := ctx.GlobalBool(startSwaggerUI.Name) - versionsRegistry, err := createVersionsRegistryTestOrProduction(ctx, generalConfig, configurationFileName, externalConfig, statusMetricsProvider, closableComponents) + versionsRegistry, err := createVersionsRegistryTestOrProduction(ctx, generalConfig, configurationFileName, statusMetricsProvider, closableComponents) if err != nil { return err } @@ -318,21 +303,10 @@ func loadMainConfig(filepath string) (*config.Config, error) { return cfg, nil } -func loadExternalConfig(filepath string) (*config.ExternalConfig, error) { - cfg := &config.ExternalConfig{} - err := core.LoadTomlFile(cfg, filepath) - if err != nil { - return nil, err - } - - return cfg, nil -} - func createVersionsRegistryTestOrProduction( ctx *cli.Context, cfg *config.Config, configurationFilePath string, - exCfg *config.ExternalConfig, statusMetricsHandler data.StatusMetricsProvider, closableComponents *data.ClosableComponentsHandler, ) (data.VersionsRegistryHandler, error) { @@ -395,7 +369,6 @@ func createVersionsRegistryTestOrProduction( return createVersionsRegistry( testCfg, configurationFilePath, - exCfg, statusMetricsHandler, ctx.GlobalString(walletKeyPemFile.Name), ctx.GlobalString(apiConfigDirectory.Name), @@ -406,7 +379,6 @@ func createVersionsRegistryTestOrProduction( return createVersionsRegistry( cfg, configurationFilePath, - exCfg, statusMetricsHandler, ctx.GlobalString(walletKeyPemFile.Name), ctx.GlobalString(apiConfigDirectory.Name), @@ -417,7 +389,6 @@ func createVersionsRegistryTestOrProduction( func createVersionsRegistry( cfg *config.Config, configurationFilePath string, - exCfg *config.ExternalConfig, statusMetricsHandler data.StatusMetricsProvider, pemFileLocation string, apiConfigDirectoryPath string, @@ -471,12 +442,7 @@ func createVersionsRegistry( } bp.StartNodesSyncStateChecks() - connector, err := createElasticSearchConnector(exCfg) - if err != nil { - return nil, err - } - - accntProc, err := process.NewAccountProcessor(bp, pubKeyConverter, connector) + accntProc, err := process.NewAccountProcessor(bp, pubKeyConverter) if err != nil { return nil, err } @@ -534,7 +500,7 @@ func createVersionsRegistry( valStatsProc.StartCacheUpdate() nodeStatusProc.StartCacheUpdate() - blockProc, err := process.NewBlockProcessor(connector, bp) + blockProc, err := process.NewBlockProcessor(bp) if err != nil { return nil, err } @@ -590,18 +556,6 @@ func createVersionsRegistry( return versionsFactory.CreateVersionsRegistry(facadeArgs, apiConfigParser) } -func createElasticSearchConnector(exCfg *config.ExternalConfig) (process.ExternalStorageConnector, error) { - if !exCfg.ElasticSearchConnector.Enabled { - return database.NewDisabledElasticSearchConnector(), nil - } - - return database.NewElasticSearchConnector( - exCfg.ElasticSearchConnector.URL, - exCfg.ElasticSearchConnector.Username, - exCfg.ElasticSearchConnector.Password, - ) -} - func getShardCoordinator(cfg *config.Config) (common.Coordinator, error) { maxShardID := uint32(0) for _, obs := range cfg.Observers { diff --git a/config/config.go b/config/config.go index b5d23613..5cd581b4 100644 --- a/config/config.go +++ b/config/config.go @@ -52,16 +52,3 @@ type CredentialsConfig struct { Credentials []data.Credential Hasher TypeConfig } - -// ExternalConfig will hold the configurations for external tools, such as Explorer or Elastic Search -type ExternalConfig struct { - ElasticSearchConnector ElasticSearchConfig -} - -// ElasticSearchConfig will hold the configuration for the elastic search -type ElasticSearchConfig struct { - Enabled bool - URL string - Username string - Password string -} diff --git a/data/block.go b/data/block.go index 1c213a26..ac70eb0c 100644 --- a/data/block.go +++ b/data/block.go @@ -5,14 +5,6 @@ import ( "github.com/multiversx/mx-chain-core-go/data/api" ) -// AtlasBlock is a block, as required by BlockAtlas -// Will be removed when using the "hyperblock" route in BlockAtlas as well. -type AtlasBlock struct { - Nonce uint64 `form:"nonce" json:"nonce"` - Hash string `form:"hash" json:"hash"` - Transactions []DatabaseTransaction `form:"transactions" json:"transactions"` -} - // BlockApiResponse is a response holding a block type BlockApiResponse struct { Data BlockApiResponsePayload `json:"data"` diff --git a/facade/baseFacade.go b/facade/baseFacade.go index 525937d7..3dd96691 100644 --- a/facade/baseFacade.go +++ b/facade/baseFacade.go @@ -17,7 +17,6 @@ var _ groups.ActionsFacadeHandler = (*ProxyFacade)(nil) var _ groups.AccountsFacadeHandler = (*ProxyFacade)(nil) var _ groups.BlockFacadeHandler = (*ProxyFacade)(nil) var _ groups.BlocksFacadeHandler = (*ProxyFacade)(nil) -var _ groups.BlockAtlasFacadeHandler = (*ProxyFacade)(nil) var _ groups.HyperBlockFacadeHandler = (*ProxyFacade)(nil) var _ groups.NetworkFacadeHandler = (*ProxyFacade)(nil) var _ groups.NodeFacadeHandler = (*ProxyFacade)(nil) @@ -416,11 +415,6 @@ func (epf *ProxyFacade) AuctionList() ([]*data.AuctionListValidatorAPIResponse, return auctionList.AuctionListValidators, nil } -// GetAtlasBlockByShardIDAndNonce returns block by shardID and nonce in a BlockAtlas-friendly-format -func (pf *ProxyFacade) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - return pf.blockProc.GetAtlasBlockByShardIDAndNonce(shardID, nonce) -} - // GetAddressConverter returns the address converter func (pf *ProxyFacade) GetAddressConverter() (core.PubkeyConverter, error) { return pf.pubKeyConverter, nil diff --git a/facade/interface.go b/facade/interface.go index ac29e844..9ed6c19c 100644 --- a/facade/interface.go +++ b/facade/interface.go @@ -107,7 +107,6 @@ type BlocksProcessor interface { // BlockProcessor defines what a block processor should do type BlockProcessor interface { - GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) GetBlockByHash(shardID uint32, hash string, options common.BlockQueryOptions) (*data.BlockApiResponse, error) GetBlockByNonce(shardID uint32, nonce uint64, options common.BlockQueryOptions) (*data.BlockApiResponse, error) GetHyperBlockByHash(hash string, options common.HyperblockQueryOptions) (*data.HyperblockApiResponse, error) diff --git a/facade/mock/blockProcessorStub.go b/facade/mock/blockProcessorStub.go index 08b09f2b..87d8702a 100644 --- a/facade/mock/blockProcessorStub.go +++ b/facade/mock/blockProcessorStub.go @@ -7,7 +7,6 @@ import ( // BlockProcessorStub - type BlockProcessorStub struct { - GetBlockByShardIDAndNonceCalled func(shardID uint32, nonce uint64) (data.AtlasBlock, error) GetBlockByHashCalled func(shardID uint32, hash string, options common.BlockQueryOptions) (*data.BlockApiResponse, error) GetBlockByNonceCalled func(shardID uint32, nonce uint64, options common.BlockQueryOptions) (*data.BlockApiResponse, error) GetHyperBlockByHashCalled func(hash string, options common.HyperblockQueryOptions) (*data.HyperblockApiResponse, error) @@ -27,11 +26,6 @@ func (bps *BlockProcessorStub) GetBlockByNonce(shardID uint32, nonce uint64, opt return bps.GetBlockByNonceCalled(shardID, nonce, options) } -// GetAtlasBlockByShardIDAndNonce - -func (bps *BlockProcessorStub) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - return bps.GetBlockByShardIDAndNonceCalled(shardID, nonce) -} - // GetHyperBlockByHash - func (bps *BlockProcessorStub) GetHyperBlockByHash(hash string, options common.HyperblockQueryOptions) (*data.HyperblockApiResponse, error) { if bps.GetHyperBlockByHashCalled != nil { diff --git a/go.mod b/go.mod index fbb90512..1bd7ba8f 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/multiversx/mx-chain-proxy-go go 1.20 require ( - github.com/elastic/go-elasticsearch/v7 v7.12.0 github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/pprof v1.4.0 github.com/gin-contrib/static v0.0.1 diff --git a/go.sum b/go.sum index 3ff90b70..ea5cead0 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,6 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ= github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI= -github.com/elastic/go-elasticsearch/v7 v7.12.0 h1:j4tvcMrZJLp39L2NYvBb7f+lHKPqPHSL3nvB8+/DV+s= -github.com/elastic/go-elasticsearch/v7 v7.12.0/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= diff --git a/process/accountProcessor.go b/process/accountProcessor.go index a749a4f0..3846b22e 100644 --- a/process/accountProcessor.go +++ b/process/accountProcessor.go @@ -18,28 +18,23 @@ const addressPath = "/address/" // AccountProcessor is able to process account requests type AccountProcessor struct { - connector ExternalStorageConnector proc Processor pubKeyConverter core.PubkeyConverter availabilityProvider availabilityCommon.AvailabilityProvider } // NewAccountProcessor creates a new instance of AccountProcessor -func NewAccountProcessor(proc Processor, pubKeyConverter core.PubkeyConverter, connector ExternalStorageConnector) (*AccountProcessor, error) { +func NewAccountProcessor(proc Processor, pubKeyConverter core.PubkeyConverter) (*AccountProcessor, error) { if check.IfNil(proc) { return nil, ErrNilCoreProcessor } if check.IfNil(pubKeyConverter) { return nil, ErrNilPubKeyConverter } - if check.IfNil(connector) { - return nil, ErrNilDatabaseConnector - } return &AccountProcessor{ proc: proc, pubKeyConverter: pubKeyConverter, - connector: connector, availabilityProvider: availabilityCommon.AvailabilityProvider{}, }, nil } diff --git a/process/accountProcessor_test.go b/process/accountProcessor_test.go index 608c0ebf..312b2fc2 100644 --- a/process/accountProcessor_test.go +++ b/process/accountProcessor_test.go @@ -12,7 +12,6 @@ import ( "github.com/multiversx/mx-chain-proxy-go/common" "github.com/multiversx/mx-chain-proxy-go/data" "github.com/multiversx/mx-chain-proxy-go/process" - "github.com/multiversx/mx-chain-proxy-go/process/database" "github.com/multiversx/mx-chain-proxy-go/process/mock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -21,7 +20,7 @@ import ( func TestNewAccountProcessor_NilCoreProcessorShouldErr(t *testing.T) { t.Parallel() - ap, err := process.NewAccountProcessor(nil, &mock.PubKeyConverterMock{}, database.NewDisabledElasticSearchConnector()) + ap, err := process.NewAccountProcessor(nil, &mock.PubKeyConverterMock{}) assert.Nil(t, ap) assert.Equal(t, process.ErrNilCoreProcessor, err) @@ -30,7 +29,7 @@ func TestNewAccountProcessor_NilCoreProcessorShouldErr(t *testing.T) { func TestNewAccountProcessor_NilPubKeyConverterShouldErr(t *testing.T) { t.Parallel() - ap, err := process.NewAccountProcessor(&mock.ProcessorStub{}, nil, database.NewDisabledElasticSearchConnector()) + ap, err := process.NewAccountProcessor(&mock.ProcessorStub{}, nil) assert.Nil(t, ap) assert.Equal(t, process.ErrNilPubKeyConverter, err) @@ -39,7 +38,7 @@ func TestNewAccountProcessor_NilPubKeyConverterShouldErr(t *testing.T) { func TestNewAccountProcessor_WithCoreProcessorShouldWork(t *testing.T) { t.Parallel() - ap, err := process.NewAccountProcessor(&mock.ProcessorStub{}, &mock.PubKeyConverterMock{}, database.NewDisabledElasticSearchConnector()) + ap, err := process.NewAccountProcessor(&mock.ProcessorStub{}, &mock.PubKeyConverterMock{}) assert.NotNil(t, ap) assert.Nil(t, err) @@ -50,7 +49,7 @@ func TestNewAccountProcessor_WithCoreProcessorShouldWork(t *testing.T) { func TestAccountProcessor_GetAccountInvalidHexAddressShouldErr(t *testing.T) { t.Parallel() - ap, _ := process.NewAccountProcessor(&mock.ProcessorStub{}, &mock.PubKeyConverterMock{}, database.NewDisabledElasticSearchConnector()) + ap, _ := process.NewAccountProcessor(&mock.ProcessorStub{}, &mock.PubKeyConverterMock{}) accnt, err := ap.GetAccount("invalid hex number", common.AccountQueryOptions{}) assert.Nil(t, accnt) @@ -69,7 +68,6 @@ func TestAccountProcessor_GetAccountComputeShardIdFailsShouldErr(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" accnt, err := ap.GetAccount(address, common.AccountQueryOptions{}) @@ -92,7 +90,6 @@ func TestAccountProcessor_GetAccountGetObserversFailsShouldErr(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" accnt, err := ap.GetAccount(address, common.AccountQueryOptions{}) @@ -121,7 +118,6 @@ func TestAccountProcessor_GetAccountSendingFailsOnAllObserversShouldErr(t *testi }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" accnt, err := ap.GetAccount(address, common.AccountQueryOptions{}) @@ -162,7 +158,6 @@ func TestAccountProcessor_GetAccountSendingFailsOnFirstObserverShouldStillSend(t }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" accountModel, err := ap.GetAccount(address, common.AccountQueryOptions{}) @@ -192,7 +187,6 @@ func TestAccountProcessor_GetValueForAKeyShouldWork(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) key := "key" @@ -221,7 +215,6 @@ func TestAccountProcessor_GetValueForAKeyShouldError(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) key := "key" @@ -255,7 +248,6 @@ func TestAccountProcessor_GetShardIForAddressShouldWork(t *testing.T) { }, }, bech32C, - database.NewDisabledElasticSearchConnector(), ) shardID, err := ap.GetShardIDForAddress(addressShard1) @@ -278,7 +270,6 @@ func TestAccountProcessor_GetShardIDForAddressShouldError(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) shardID, err := ap.GetShardIDForAddress("aaaa") @@ -297,7 +288,6 @@ func TestAccountProcessor_GetESDTsWithRoleGetObserversFails(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetESDTsWithRole("address", "role", common.AccountQueryOptions{}) @@ -325,7 +315,6 @@ func TestAccountProcessor_GetESDTsWithRoleApiCallFails(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetESDTsWithRole("address", "role", common.AccountQueryOptions{}) @@ -354,7 +343,6 @@ func TestAccountProcessor_GetESDTsWithRoleShouldWork(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" response, err := ap.GetESDTsWithRole(address, "role", common.AccountQueryOptions{}) @@ -373,7 +361,6 @@ func TestAccountProcessor_GetESDTsRolesGetObserversFails(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetESDTsRoles("address", common.AccountQueryOptions{}) @@ -401,7 +388,6 @@ func TestAccountProcessor_GetESDTsRolesApiCallFails(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetESDTsRoles("address", common.AccountQueryOptions{}) @@ -430,7 +416,6 @@ func TestAccountProcessor_GetESDTsRolesShouldWork(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" response, err := ap.GetESDTsRoles(address, common.AccountQueryOptions{}) @@ -458,7 +443,6 @@ func TestAccountProcessor_GetCodeHash(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - database.NewDisabledElasticSearchConnector(), ) address := "DEADBEEF" response, err := ap.GetCodeHash(address, common.AccountQueryOptions{}) @@ -477,7 +461,6 @@ func TestAccountProcessor_IsDataTrieMigrated(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.IsDataTrieMigrated("address", common.AccountQueryOptions{}) @@ -505,7 +488,6 @@ func TestAccountProcessor_IsDataTrieMigrated(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.IsDataTrieMigrated("DEADBEEF", common.AccountQueryOptions{}) @@ -535,7 +517,6 @@ func TestAccountProcessor_IsDataTrieMigrated(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.IsDataTrieMigrated("DEADBEEF", common.AccountQueryOptions{}) @@ -582,7 +563,6 @@ func TestAccountProcessor_GetAccounts(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetAccounts([]string{"aabb", "bbaa"}, common.AccountQueryOptions{}) @@ -628,7 +608,6 @@ func TestAccountProcessor_GetAccounts(t *testing.T) { }, }, &mock.PubKeyConverterMock{}, - &mock.ElasticSearchConnectorMock{}, ) result, err := ap.GetAccounts([]string{"aabb", "bbaa"}, common.AccountQueryOptions{}) diff --git a/process/blockProcessor.go b/process/blockProcessor.go index 63388e37..63dfaedd 100644 --- a/process/blockProcessor.go +++ b/process/blockProcessor.go @@ -38,29 +38,20 @@ const ( // BlockProcessor handles blocks retrieving type BlockProcessor struct { proc Processor - dbReader ExternalStorageConnector } // NewBlockProcessor will create a new block processor -func NewBlockProcessor(dbReader ExternalStorageConnector, proc Processor) (*BlockProcessor, error) { - if check.IfNil(dbReader) { - return nil, ErrNilDatabaseConnector - } +func NewBlockProcessor(proc Processor) (*BlockProcessor, error) { if check.IfNil(proc) { return nil, ErrNilCoreProcessor } return &BlockProcessor{ - dbReader: dbReader, proc: proc, }, nil } -// GetAtlasBlockByShardIDAndNonce return the block byte shardID and nonce -func (bp *BlockProcessor) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - return bp.dbReader.GetAtlasBlockByShardIDAndNonce(shardID, nonce) -} - + // GetBlockByHash will return the block based on its hash func (bp *BlockProcessor) GetBlockByHash(shardID uint32, hash string, options common.BlockQueryOptions) (*data.BlockApiResponse, error) { observers, err := bp.getObserversOrFullHistoryNodes(shardID) diff --git a/process/blockProcessor_test.go b/process/blockProcessor_test.go index 146deef1..2451f03b 100644 --- a/process/blockProcessor_test.go +++ b/process/blockProcessor_test.go @@ -18,18 +18,10 @@ import ( "github.com/stretchr/testify/require" ) -func TestNewBlockProcessor_NilExternalStorageConnectorShouldErr(t *testing.T) { - t.Parallel() - - bp, err := process.NewBlockProcessor(nil, &mock.ProcessorStub{}) - require.Nil(t, bp) - require.Equal(t, process.ErrNilDatabaseConnector, err) -} - func TestNewBlockProcessor_NilProcessorShouldErr(t *testing.T) { t.Parallel() - bp, err := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, nil) + bp, err := process.NewBlockProcessor(nil) require.Nil(t, bp) require.Equal(t, process.ErrNilCoreProcessor, err) } @@ -37,22 +29,11 @@ func TestNewBlockProcessor_NilProcessorShouldErr(t *testing.T) { func TestNewBlockProcessor_ShouldWork(t *testing.T) { t.Parallel() - bp, err := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, &mock.ProcessorStub{}) + bp, err := process.NewBlockProcessor(&mock.ProcessorStub{}) require.NotNil(t, bp) require.NoError(t, err) } -func TestBlockProcessor_GetAtlasBlockByShardIDAndNonce(t *testing.T) { - t.Parallel() - - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, &mock.ProcessorStub{}) - require.NotNil(t, bp) - - res, err := bp.GetAtlasBlockByShardIDAndNonce(0, 1) - require.NoError(t, err) - require.NotNil(t, res) -} - func TestBlockProcessor_GetBlockByHashShouldGetFullHistoryNodes(t *testing.T) { t.Parallel() @@ -70,7 +51,7 @@ func TestBlockProcessor_GetBlockByHashShouldGetFullHistoryNodes(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{}) @@ -96,7 +77,7 @@ func TestBlockProcessor_GetBlockByHashShouldGetObservers(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{}) @@ -118,7 +99,7 @@ func TestBlockProcessor_GetBlockByHashNoFullNodesOrObserversShouldErr(t *testing }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{}) @@ -139,7 +120,7 @@ func TestBlockProcessor_GetBlockByHashCallGetFailsShouldErr(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{}) @@ -162,7 +143,7 @@ func TestBlockProcessor_GetBlockByHashShouldWork(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{}) @@ -190,7 +171,7 @@ func TestBlockProcessor_GetBlockByHashShouldWorkAndIncludeAlsoTxs(t *testing.T) }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByHash(0, "hash", common.BlockQueryOptions{WithTransactions: true}) @@ -219,7 +200,7 @@ func TestBlockProcessor_GetBlockByNonceShouldGetFullHistoryNodes(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetBlockByNonce(0, 0, common.BlockQueryOptions{}) @@ -245,7 +226,7 @@ func TestBlockProcessor_GetBlockByNonceShouldGetObservers(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetBlockByNonce(0, 1, common.BlockQueryOptions{}) @@ -267,7 +248,7 @@ func TestBlockProcessor_GetBlockByNonceNoFullNodesOrObserversShouldErr(t *testin }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByNonce(0, 1, common.BlockQueryOptions{}) @@ -288,7 +269,7 @@ func TestBlockProcessor_GetBlockByNonceCallGetFailsShouldErr(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByNonce(0, 0, common.BlockQueryOptions{}) @@ -311,7 +292,7 @@ func TestBlockProcessor_GetBlockByNonceShouldWork(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByNonce(0, nonce, common.BlockQueryOptions{}) @@ -339,7 +320,7 @@ func TestBlockProcessor_GetBlockByNonceShouldWorkAndIncludeAlsoTxs(t *testing.T) }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetBlockByNonce(0, 3, common.BlockQueryOptions{WithTransactions: true}) @@ -378,7 +359,7 @@ func TestBlockProcessor_GetHyperBlock(t *testing.T) { }, } - processor, err := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + processor, err := process.NewBlockProcessor(proc) require.Nil(t, err) require.NotNil(t, processor) @@ -410,7 +391,7 @@ func TestBlockProcessor_GetInternalBlockByNonceInvalidOutputFormat_ShouldFail(t }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) blk, err := bp.GetInternalBlockByNonce(0, 0, 2) @@ -435,7 +416,7 @@ func TestBlockProcessor_GetInternalBlockByNonceShouldGetFullHistoryNodes(t *test }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalBlockByNonce(0, 0, common.Internal) @@ -461,7 +442,7 @@ func TestBlockProcessor_GetInternalBlockByNonceShouldGetObservers(t *testing.T) }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalBlockByNonce(0, 1, common.Internal) @@ -483,7 +464,7 @@ func TestBlockProcessor_GetInternalBlockByNonceNoFullNodesOrObserversShouldErr(t }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByNonce(0, 1, common.Internal) @@ -504,7 +485,7 @@ func TestBlockProcessor_GetInternalBlockByNonceCallGetFailsShouldErr(t *testing. }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByNonce(0, 0, common.Internal) @@ -533,7 +514,7 @@ func TestBlockProcessor_GetInternalBlockByNonceShouldWork(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByNonce(0, nonce, common.Internal) @@ -558,7 +539,7 @@ func TestBlockProcessor_GetInternalBlockByHashInvalidOutputFormat_ShouldFail(t * }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) blk, err := bp.GetInternalBlockByHash(0, "aaaa", 2) @@ -583,7 +564,7 @@ func TestBlockProcessor_GetInternalBlockByHashShouldGetFullHistoryNodes(t *testi }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalBlockByHash(0, "aaaa", common.Internal) @@ -609,7 +590,7 @@ func TestBlockProcessor_GetInternalBlockByHashShouldGetObservers(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalBlockByHash(0, "aaaa", common.Internal) @@ -631,7 +612,7 @@ func TestBlockProcessor_GetInternalBlockByHashNoFullNodesOrObserversShouldErr(t }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByHash(0, "aaaa", common.Internal) @@ -652,7 +633,7 @@ func TestBlockProcessor_GetInternalBlockByHashCallGetFailsShouldErr(t *testing.T }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByHash(0, "aaaa", common.Internal) @@ -680,7 +661,7 @@ func TestBlockProcessor_GetInternalBlockByHashShouldWork(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalBlockByHash(0, "aaaa", common.Internal) @@ -705,7 +686,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashInvalidOutputFormat_ShouldFail }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) blk, err := bp.GetInternalMiniBlockByHash(0, "aaaa", 1, 2) @@ -730,7 +711,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashShouldGetFullHistoryNodes(t *t }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalMiniBlockByHash(0, "aaaa", 1, common.Internal) @@ -756,7 +737,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashShouldGetObservers(t *testing. }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalMiniBlockByHash(0, "aaaa", 1, common.Internal) @@ -778,7 +759,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashNoFullNodesOrObserversShouldEr }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalMiniBlockByHash(0, "aaaa", 1, common.Internal) @@ -799,7 +780,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashCallGetFailsShouldErr(t *testi }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalMiniBlockByHash(0, "aaaa", 1, common.Internal) @@ -827,7 +808,7 @@ func TestBlockProcessor_GetInternalMiniBlockByHashShouldWork(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalMiniBlockByHash(0, "aaaa", 1, common.Internal) @@ -852,7 +833,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockInvalidOutputFormat_Shou }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) blk, err := bp.GetInternalStartOfEpochMetaBlock(0, 2) @@ -877,7 +858,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockShouldGetFullHistoryNode }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalStartOfEpochMetaBlock(0, common.Internal) @@ -903,7 +884,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockShouldGetObservers(t *te }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) _, _ = bp.GetInternalStartOfEpochMetaBlock(0, common.Internal) @@ -925,7 +906,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockNoFullNodesOrObserversSh }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalStartOfEpochMetaBlock(0, common.Internal) @@ -947,7 +928,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockCallGetFailsShouldErr(t }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalStartOfEpochMetaBlock(0, common.Internal) @@ -975,7 +956,7 @@ func TestBlockProcessor_GetInternalStartOfEpochMetaBlockShouldWork(t *testing.T) }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalStartOfEpochMetaBlock(1, common.Internal) @@ -1005,7 +986,7 @@ func TestBlockProcessor_GetAlteredAccountsByNonce(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByNonce(requestedShardID, 4, common.GetAlteredAccountsForBlockOptions{}) require.Equal(t, expectedErr, err) require.Nil(t, res) @@ -1034,7 +1015,7 @@ func TestBlockProcessor_GetAlteredAccountsByNonce(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByNonce(requestedShardID, 4, common.GetAlteredAccountsForBlockOptions{}) require.Equal(t, 2, callGetEndpointCt) require.True(t, errors.Is(err, process.ErrSendingRequest)) @@ -1063,7 +1044,7 @@ func TestBlockProcessor_GetAlteredAccountsByNonce(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByNonce(requestedShardID, 4, common.GetAlteredAccountsForBlockOptions{}) require.Nil(t, err) require.Equal(t, &data.AlteredAccountsApiResponse{ @@ -1092,7 +1073,7 @@ func TestBlockProcessor_GetAlteredAccountsByHash(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByHash(requestedShardID, "hash", common.GetAlteredAccountsForBlockOptions{}) require.Equal(t, expectedErr, err) require.Nil(t, res) @@ -1121,7 +1102,7 @@ func TestBlockProcessor_GetAlteredAccountsByHash(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByHash(requestedShardID, "hash", common.GetAlteredAccountsForBlockOptions{}) require.Equal(t, 2, callGetEndpointCt) require.True(t, errors.Is(err, process.ErrSendingRequest)) @@ -1150,7 +1131,7 @@ func TestBlockProcessor_GetAlteredAccountsByHash(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetAlteredAccountsByHash(requestedShardID, "hash", common.GetAlteredAccountsForBlockOptions{}) require.Nil(t, err) require.Equal(t, &data.AlteredAccountsApiResponse{ @@ -1245,7 +1226,7 @@ func TestBlockProcessor_GetHyperBlockByNonceWithAlteredAccounts(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetHyperBlockByNonce(4, common.HyperblockQueryOptions{WithAlteredAccounts: true}) require.Nil(t, err) @@ -1362,7 +1343,7 @@ func TestBlockProcessor_GetHyperBlockByHashWithAlteredAccounts(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) res, err := bp.GetHyperBlockByHash("abcdef", common.HyperblockQueryOptions{WithAlteredAccounts: true}) require.Nil(t, err) @@ -1419,7 +1400,7 @@ func TestBlockProcessor_GetInternalStartOfEpochValidatorsInfo(t *testing.T) { }, } - bp, _ := process.NewBlockProcessor(&mock.ExternalStorageConnectorStub{}, proc) + bp, _ := process.NewBlockProcessor(proc) require.NotNil(t, bp) res, err := bp.GetInternalStartOfEpochValidatorsInfo(1) diff --git a/process/database/disabledElasticSearchConnector.go b/process/database/disabledElasticSearchConnector.go deleted file mode 100644 index 3f82d070..00000000 --- a/process/database/disabledElasticSearchConnector.go +++ /dev/null @@ -1,30 +0,0 @@ -package database - -import ( - "errors" - - "github.com/multiversx/mx-chain-proxy-go/data" -) - -var errDatabaseConnectionIsDisabled = errors.New("database connection is disabled") - -type disabledElasticSearchConnector struct{} - -func NewDisabledElasticSearchConnector() *disabledElasticSearchConnector { - return new(disabledElasticSearchConnector) -} - -// GetTransactionsByAddress will return error because database connection is disabled -func (desc *disabledElasticSearchConnector) GetTransactionsByAddress(_ string) ([]data.DatabaseTransaction, error) { - return nil, errDatabaseConnectionIsDisabled -} - -// GetAtlasBlockByShardIDAndNonce will return error because database connection is disabled -func (desc *disabledElasticSearchConnector) GetAtlasBlockByShardIDAndNonce(_ uint32, _ uint64) (data.AtlasBlock, error) { - return data.AtlasBlock{}, errDatabaseConnectionIsDisabled -} - -// IsInterfaceNil - -func (desc *disabledElasticSearchConnector) IsInterfaceNil() bool { - return desc == nil -} diff --git a/process/database/elasticSearchConnector.go b/process/database/elasticSearchConnector.go deleted file mode 100644 index 0b6cd4c7..00000000 --- a/process/database/elasticSearchConnector.go +++ /dev/null @@ -1,173 +0,0 @@ -package database - -import ( - "encoding/json" - "fmt" - - "github.com/elastic/go-elasticsearch/v7" - "github.com/multiversx/mx-chain-proxy-go/data" -) - -const ( - numTopTransactions = 20 - numTransactionFromAMiniblock = 100 -) - -type elasticSearchConnector struct { - client *elasticsearch.Client -} - -// NewElasticSearchConnector create a new elastic search database reader object -func NewElasticSearchConnector(url, username, password string) (*elasticSearchConnector, error) { - cfg := elasticsearch.Config{ - Addresses: []string{url}, - Username: username, - Password: password, - } - - client, err := elasticsearch.NewClient(cfg) - if err != nil { - return nil, fmt.Errorf("cannot create database reader %w", err) - } - - return &elasticSearchConnector{ - client: client, - }, nil -} - -// GetAtlasBlockByShardIDAndNonce gets from database a block with the specified shardID and nonce -func (esc *elasticSearchConnector) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - query := blockByNonceAndShardIDQuery(nonce, shardID) - decodedBody, err := esc.doSearchRequest(query, "blocks", 1) - if err != nil { - return data.AtlasBlock{}, err - } - - metaBlock, metaBlockHash, err := convertObjectToBlock(decodedBody) - if err != nil { - return data.AtlasBlock{}, err - } - - txs, err := esc.getTxsByMiniblockHashes(metaBlock.MiniBlocksHashes) - if err != nil { - return data.AtlasBlock{}, err - } - - transactions, err := esc.getTxsByNotarizedBlockHashes(metaBlock.NotarizedBlocksHashes) - if err != nil { - return data.AtlasBlock{}, err - } - - txs = append(txs, transactions...) - - return data.AtlasBlock{ - Nonce: metaBlock.Nonce, - Hash: metaBlockHash, - Transactions: txs, - }, nil -} - -func (esc *elasticSearchConnector) getTxsByNotarizedBlockHashes(hashes []string) ([]data.DatabaseTransaction, error) { - txs := make([]data.DatabaseTransaction, 0) - for _, hash := range hashes { - query := blockByHashQuery(hash) - decodedBody, err := esc.doSearchRequest(query, "blocks", 1) - if err != nil { - return nil, err - } - - shardBlock, _, err := convertObjectToBlock(decodedBody) - if err != nil { - return nil, err - } - - transactions, err := esc.getTxsByMiniblockHashes(shardBlock.MiniBlocksHashes) - if err != nil { - return nil, err - } - - txs = append(txs, transactions...) - } - return txs, nil -} - -func (esc *elasticSearchConnector) getTxsByMiniblockHashes(hashes []string) ([]data.DatabaseTransaction, error) { - txs := make([]data.DatabaseTransaction, 0) - for _, hash := range hashes { - query := txsByMiniblockHashQuery(hash) - decodedBody, err := esc.doSearchRequest(query, "transactions", numTransactionFromAMiniblock) - if err != nil { - return nil, err - } - - transactions, err := convertObjectToTransactions(decodedBody) - if err != nil { - return nil, err - } - - txs = append(txs, transactions...) - } - return txs, nil -} - -func (esc *elasticSearchConnector) doSearchRequest(query object, index string, size int) (object, error) { - buff, err := encodeQuery(query) - if err != nil { - return nil, err - } - - res, err := esc.client.Search( - esc.client.Search.WithIndex(index), - esc.client.Search.WithSize(size), - esc.client.Search.WithBody(&buff), - ) - if err != nil { - return nil, fmt.Errorf("cannot get data from database: %w", err) - } - - defer func() { - _ = res.Body.Close() - }() - if res.IsError() { - return nil, fmt.Errorf("cannot get data from database: %v", res) - } - - var decodedBody map[string]interface{} - if err := json.NewDecoder(res.Body).Decode(&decodedBody); err != nil { - return nil, err - } - - return decodedBody, nil -} - -func (esc *elasticSearchConnector) doSearchRequestTx(address string, index string, size int) (object, error) { - query := fmt.Sprintf("sender:%s OR receiver:%s", address, address) - res, err := esc.client.Search( - esc.client.Search.WithIndex(index), - esc.client.Search.WithSize(size), - esc.client.Search.WithQuery(query), - esc.client.Search.WithSort("timestamp:desc"), - ) - if err != nil { - return nil, fmt.Errorf("cannot get data from database: %w", err) - } - - defer func() { - _ = res.Body.Close() - }() - if res.IsError() { - return nil, fmt.Errorf("cannot get data from database: %v", res) - } - - var decodedBody map[string]interface{} - if err := json.NewDecoder(res.Body).Decode(&decodedBody); err != nil { - return nil, err - } - - return decodedBody, nil -} - -// IsInterfaceNil returns true if there is no value under the interface -func (esc *elasticSearchConnector) IsInterfaceNil() bool { - return esc == nil -} diff --git a/process/database/elasticSearchConnector_test.go b/process/database/elasticSearchConnector_test.go deleted file mode 100644 index 2b6b1949..00000000 --- a/process/database/elasticSearchConnector_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package database - -import ( - "fmt" - "testing" - - "github.com/multiversx/mx-chain-core-go/core" - "github.com/stretchr/testify/require" -) - - -func TestDatabaseReader_GetBlockByShardIDAndNonce(t *testing.T) { - t.Skip("this test queries Elastic Search") - - url := "https://elastic-aws.multiversx.com" - user := "" - password := "" - reader, err := NewElasticSearchConnector(url, user, password) - require.Nil(t, err) - - block, err := reader.GetAtlasBlockByShardIDAndNonce(core.MetachainShardId, 7720) - fmt.Println(block) - require.Nil(t, err) -} diff --git a/process/interface.go b/process/interface.go index bbfb5932..eb7e558c 100644 --- a/process/interface.go +++ b/process/interface.go @@ -29,12 +29,6 @@ type Processor interface { IsInterfaceNil() bool } -// ExternalStorageConnector defines what a external storage connector should be able to do -type ExternalStorageConnector interface { - GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) - IsInterfaceNil() bool -} - // PrivateKeysLoaderHandler defines what a component which handles loading of the private keys file should do type PrivateKeysLoaderHandler interface { PrivateKeysByShard() (map[uint32][]crypto.PrivateKey, error) diff --git a/process/mock/elasticSearchConnectorMock.go b/process/mock/elasticSearchConnectorMock.go deleted file mode 100644 index b6c97769..00000000 --- a/process/mock/elasticSearchConnectorMock.go +++ /dev/null @@ -1,16 +0,0 @@ -package mock - -import "github.com/multiversx/mx-chain-proxy-go/data" - -type ElasticSearchConnectorMock struct { -} - -// GetAtlasBlockByShardIDAndNonce - -func (escm *ElasticSearchConnectorMock) GetAtlasBlockByShardIDAndNonce(_ uint32, _ uint64) (data.AtlasBlock, error) { - return data.AtlasBlock{}, nil -} - -// IsInterfaceNil - -func (escm *ElasticSearchConnectorMock) IsInterfaceNil() bool { - return escm == nil -} diff --git a/process/mock/externalStorageConnectorStub.go b/process/mock/externalStorageConnectorStub.go deleted file mode 100644 index febec410..00000000 --- a/process/mock/externalStorageConnectorStub.go +++ /dev/null @@ -1,21 +0,0 @@ -package mock - -import "github.com/multiversx/mx-chain-proxy-go/data" - -type ExternalStorageConnectorStub struct { - GetAtlasBlockByShardIDAndNonceCalled func(shardID uint32, nonce uint64) (data.AtlasBlock, error) -} - -// GetAtlasBlockByShardIDAndNonce - -func (e *ExternalStorageConnectorStub) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) { - if e.GetAtlasBlockByShardIDAndNonceCalled != nil { - return e.GetAtlasBlockByShardIDAndNonceCalled(shardID, nonce) - } - - return data.AtlasBlock{Hash: "hash"}, nil -} - -// IsInterfaceNil - -func (e *ExternalStorageConnectorStub) IsInterfaceNil() bool { - return e == nil -}