Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rc/v1.4.0 #334

Merged
merged 127 commits into from
Feb 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
ed6fa93
add getProofDataTrie endopint
BeniaminDrasovean Oct 7, 2021
fef0cd5
readd unit tests
BeniaminDrasovean Oct 7, 2021
47e4ad4
fix after review
BeniaminDrasovean Oct 8, 2021
533fce3
revert some changes
BeniaminDrasovean Oct 8, 2021
1eb5b42
remove elrond-go dependency
miiu96 Sep 29, 2022
4164a90
go mod tidy
miiu96 Sep 29, 2022
065938b
update elrond-go-logger
miiu96 Oct 3, 2022
9f630b1
Merge branch 'development' into remove-elrond-go-dependency
miiu96 Oct 5, 2022
fdcf719
added group for about info endpoint
ssd04 Oct 13, 2022
79c6a85
update Makefile with build and run commands
ssd04 Oct 13, 2022
458a96a
use about info processor
ssd04 Oct 13, 2022
669aed2
update github build worklow to use make command
ssd04 Oct 13, 2022
ed81893
added const for short hash size
ssd04 Oct 13, 2022
b98fb87
added unit tests for about info endpoint
ssd04 Oct 13, 2022
47247de
added about info endpoint to config
ssd04 Oct 13, 2022
d289a28
set about info path to secured false
ssd04 Oct 14, 2022
819fc0d
Merge pull request #332 from ElrondNetwork/add-about-info-endpoint
ssd04 Oct 14, 2022
c31332d
update go build in dockerfile
ssd04 Oct 14, 2022
06ba53a
update version in cli help
ssd04 Oct 14, 2022
b4c8ba5
adapt workflows for rc branches
bogdan-rosianu Oct 17, 2022
0278081
Merge pull request #335 from ElrondNetwork/adapt-workflows-rcv-1-4-0
bogdan-rosianu Oct 17, 2022
a132c1f
Merge branch 'rc/v1.4.0' into update-binary-build-in-dockerfile
bogdan-rosianu Oct 17, 2022
6a5dfe0
added option to parse hyperblock with txs finalized at source
bogdan-rosianu Oct 17, 2022
4d30630
rename url param
bogdan-rosianu Oct 17, 2022
49ac0be
FEAT: First version
mariusmihaic Oct 18, 2022
a1fe37c
Merge pull request #333 from ElrondNetwork/update-binary-build-in-doc…
ssd04 Oct 18, 2022
986bbe6
FIX: Test + remove hyperblock
mariusmihaic Oct 18, 2022
9804def
Merge branch 'rc/v1.4.0' into EN-13247-missing-fields-notarized-blocks
mariusmihaic Oct 18, 2022
54cd04f
FIX: final test
mariusmihaic Oct 18, 2022
c6027dd
CLN: Upgrade go mod
mariusmihaic Oct 19, 2022
6ad3a26
CLN: Upgrade go mod
mariusmihaic Oct 19, 2022
5fbcf62
FEAT: Dummy version get altered by nonce
mariusmihaic Oct 19, 2022
089295c
FEAT: Move logic in block processor
mariusmihaic Oct 19, 2022
6142477
Merge branch 'rc/v1.4.0' into hyperblock-with-notarized-at-source
bogdan-rosianu Oct 19, 2022
bb94dff
FIX: General fixes after testing
mariusmihaic Oct 21, 2022
9bff9f9
FIX: Missing comms + unused
mariusmihaic Oct 21, 2022
25a3f90
FEAT: First unit tests GetAlteredAccountsByNonce
mariusmihaic Oct 21, 2022
aa84ca3
Merge pull request #336 from ElrondNetwork/hyperblock-with-notarized-…
bogdan-rosianu Oct 24, 2022
14e62bd
new route /network/trie-statistics
sstanculeanu Oct 25, 2022
0119557
added pidString + numTrieNodesReceived on PubKeyHeartbeat in respect …
sstanculeanu Oct 25, 2022
9d44fdb
fixed compile error
sstanculeanu Oct 25, 2022
20ee469
FEAT: First unit tests GetAlteredAccountsByHash
mariusmihaic Oct 26, 2022
ae30cac
FEAT: Unit tests for query params
mariusmihaic Oct 26, 2022
315e587
FEAT: Unit tests block processor
mariusmihaic Oct 26, 2022
ac2d9bb
DOC: Update readme
mariusmihaic Oct 26, 2022
7794bd8
Merge pull request #337 from ElrondNetwork/EN-13247-missing-fields-no…
mariusmihaic Oct 26, 2022
66e1ea6
FIX: Review comments
mariusmihaic Oct 26, 2022
2f5823f
Merge pull request #339 from ElrondNetwork/EN-13166-altered-accounts-…
mariusmihaic Oct 27, 2022
d25df73
Merge branch 'rc/v1.4.0' into merge-rc-1.4-into-altered
mariusmihaic Oct 27, 2022
b166f91
Merge branch 'rc/v1.4.0' into feat/covalent
mariusmihaic Oct 27, 2022
6e718c6
FIX: Merge conflicts
mariusmihaic Oct 27, 2022
bab58b9
Merge pull request #344 from ElrondNetwork/merge-rc-1.4-into-altered
mariusmihaic Oct 27, 2022
018052a
Merge pull request #345 from ElrondNetwork/merge-rc-1-4-into-covalent
mariusmihaic Oct 27, 2022
be3e9a2
FEAT: First working version
mariusmihaic Oct 27, 2022
d72a633
Merge pull request #341 from ElrondNetwork/new_route_trie_statistics
sstanculeanu Oct 27, 2022
d4dc066
FIX: Small refactor
mariusmihaic Oct 27, 2022
94130de
FEAT: Add unit test for GetHyperBlockByNonce
mariusmihaic Oct 28, 2022
b7ed96b
FEAT: Finish unit tests
mariusmihaic Oct 28, 2022
de98a24
FEAT: Update README.md
mariusmihaic Nov 1, 2022
64ecba2
Merge pull request #346 from ElrondNetwork/EN-13166-altered-accounts-…
mariusmihaic Nov 1, 2022
5079763
Merge branch 'feat/altered-accounts' into merge-altered-accounts-into…
mariusmihaic Nov 1, 2022
7edd7d8
FIX: After merge
mariusmihaic Nov 1, 2022
c568592
Merge pull request #347 from ElrondNetwork/merge-altered-accounts-int…
mariusmihaic Nov 1, 2022
49e1b65
Merge pull request #343 from ElrondNetwork/feat/covalent
mariusmihaic Nov 1, 2022
bdf8e98
Merge branch 'rc/v1.4.0' into merge-rcv140-into-altered-accounts-1-no…
mariusmihaic Nov 1, 2022
512d3dd
FIX: Go mod
mariusmihaic Nov 1, 2022
6a6f78c
Merge pull request #348 from ElrondNetwork/merge-rcv140-into-altered-…
mariusmihaic Nov 1, 2022
a80c79e
FIX: Update go mod
mariusmihaic Nov 8, 2022
2db8b37
Merge pull request #350 from ElrondNetwork/update-go-mod-altered-8-no…
mariusmihaic Nov 8, 2022
64e2565
Merge branch 'development' into remove-elrond-go-dependency
miiu96 Nov 11, 2022
7d7eefc
Merge branch 'rc/v1.4.0' into remove-elrond-go-dependency
miiu96 Nov 11, 2022
fe46484
proper tags
miiu96 Nov 11, 2022
eb4eac4
fix after review
miiu96 Nov 11, 2022
f2aaaad
fixes after review
miiu96 Nov 11, 2022
238dabe
Merge pull request #327 from ElrondNetwork/remove-elrond-go-dependency
gabi-vuls Nov 14, 2022
879b1f1
Merge branch 'master' into merge-master-rc-v1-4-0
bogdan-rosianu Nov 14, 2022
e00fc38
Merge branch 'rc/v1.4.0' into merge-rc-v1-4-into-altered-14-nov-2022
mariusmihaic Nov 14, 2022
b171e8e
FIX: Remove elrond go dependency
mariusmihaic Nov 14, 2022
63903f1
fixes after merge
bogdan-rosianu Nov 14, 2022
518ee76
fix toml files
bogdan-rosianu Nov 14, 2022
0f72aa6
add missing comment
bogdan-rosianu Nov 14, 2022
63a37c6
Merge pull request #352 from ElrondNetwork/merge-rc-v1-4-into-altered…
mariusmihaic Nov 14, 2022
d41df8c
Merge pull request #342 from ElrondNetwork/feat/altered-accounts
mariusmihaic Nov 14, 2022
80ec336
FIX: Remove elrond go dependency
mariusmihaic Nov 16, 2022
61ad2ec
FIX: Add elrond go core dependency
mariusmihaic Nov 16, 2022
12b0bdf
FIX: Update go.mod
mariusmihaic Nov 17, 2022
7899654
Merge pull request #355 from ElrondNetwork/EN-13449-remove-withMetaData
mariusmihaic Nov 17, 2022
91d5ed8
Merge branch 'rc/v1.4.0' into merge-master-rc-v1-4-0
bogdan-rosianu Nov 23, 2022
9efd87c
fixes after merge
bogdan-rosianu Nov 23, 2022
f1ab920
Merge pull request #354 from ElrondNetwork/merge-master-rc-v1-4-0
bogdan-rosianu Nov 23, 2022
0404bf5
added endpoint for getting start of epoch validators info
ssd04 Nov 25, 2022
e55a00e
added unit tests for validators info endpoint
ssd04 Nov 25, 2022
e861d8c
fix comment in facade
ssd04 Dec 7, 2022
bd861ea
Merge remote-tracking branch 'origin/rc/v1.4.0' into merkle-proof-ref…
BeniaminDrasovean Dec 8, 2022
ac99994
fix after merge
BeniaminDrasovean Dec 8, 2022
cf58131
Merge pull request #357 from ElrondNetwork/export-epoch-start-validat…
ssd04 Dec 9, 2022
5c9a19e
Merge remote-tracking branch 'origin/rc/v1.4.0' into merkle-proof-ref…
BeniaminDrasovean Dec 9, 2022
acc0130
fix after merge
BeniaminDrasovean Dec 9, 2022
f4cda7b
Merge pull request #278 from ElrondNetwork/merkle-proof-refactor
BeniaminDrasovean Dec 9, 2022
55f4c77
handle swagger ui if CLI flag is set
bogdan-rosianu Dec 15, 2022
a8d3458
FIX: Rebrand to multiversx
mariusmihaic Jan 11, 2023
dfbf0ce
FIX: Elrond occurrences
mariusmihaic Jan 11, 2023
43e5c86
FIX: File name
mariusmihaic Jan 11, 2023
9be9265
FIX: Multiversx to MultiversX
mariusmihaic Jan 25, 2023
c256768
Merge pull request #361 from multiversx/EN-13650-rebrand-multiversx
mariusmihaic Jan 25, 2023
da8bd90
added code-hash endpoint
bogdan-rosianu Jan 25, 2023
b56d899
Merge branch 'rc/v1.4.0' into handle-swagger-ui
bogdan-rosianu Jan 25, 2023
7669f38
fix go sum
bogdan-rosianu Jan 25, 2023
3c9a111
Merge pull request #363 from multiversx/add-code-hash-endpoint
gabi-vuls Jan 26, 2023
ec50608
upgrade version
miiu96 Jan 31, 2023
0af5761
proper tag
miiu96 Feb 1, 2023
959124e
Merge pull request #364 from multiversx/change-version-of-mx-chain-core
miiu96 Feb 1, 2023
620328d
Merge branch 'master' into update-rc-v1.4.9
miiu96 Feb 1, 2023
071682d
fixes after merge
miiu96 Feb 1, 2023
8e52baa
Merge pull request #365 from multiversx/update-rc-v1.4.9
iulianpascalau Feb 1, 2023
e4d100e
Merge branch 'rc/v1.4.0' into handle-swagger-ui
bogdan-rosianu Feb 6, 2023
4c1ef1d
update open api json
bogdan-rosianu Feb 6, 2023
215b362
Merge remote-tracking branch 'origin/handle-swagger-ui' into handle-s…
bogdan-rosianu Feb 6, 2023
af6d5da
moved swagger directory
bogdan-rosianu Feb 8, 2023
4672554
move swagger to config to ensure the relative path for binary
bogdan-rosianu Feb 8, 2023
4c40152
fixes after review
bogdan-rosianu Feb 9, 2023
809ad67
fixes after review 2
bogdan-rosianu Feb 9, 2023
46fd59a
more fixes
bogdan-rosianu Feb 9, 2023
5d156fc
fix esdt not found response
bogdan-rosianu Feb 9, 2023
8eb68f9
Merge pull request #367 from multiversx/hotfix-invalid-json-esdt-not-…
bogdan-rosianu Feb 9, 2023
ef51603
Merge branch 'rc/v1.4.0' into handle-swagger-ui
bogdan-rosianu Feb 13, 2023
defb4ba
Merge pull request #359 from multiversx/handle-swagger-ui
bogdan-rosianu Feb 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "CodeQL"

on:
pull_request:
branches: [development]
branches: [development, rc/*]
types: [opened, ready_for_review]
push:
workflow_dispatch:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Go

on:
pull_request:
branches: [development]
branches: [development, rc/*]
types: [opened, ready_for_review]
push:
workflow_dispatch:
Expand All @@ -29,4 +29,4 @@ jobs:
dep ensure
fi
- name: Build
run: cd cmd/proxy/ && go build -v .
run: make build
4 changes: 2 additions & 2 deletions .github/workflows/pr-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Tests

on:
push:
branches: [ master, development ]
branches: [ master, development, rc/* ]
pull_request:
branches: [ master, development ]
branches: [ master, development, rc/* ]

jobs:
test:
Expand Down
29 changes: 29 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,34 @@
SHELL := $(shell which bash)

.DEFAULT_GOAL := help

.PHONY: clean-test test build run

help:
@echo -e ""
@echo -e "Make commands:"
@grep -E '^[a-zA-Z_-]+:.*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":"}; {printf "\t\033[36m%-30s\033[0m\n", $$1}'
@echo -e ""

# #########################
# Base commands
# #########################

cmd_dir = cmd/proxy
binary = proxy

clean-test:
go clean -testcache ./...

test: clean-test
go test ./...

build:
cd ${cmd_dir} && \
go build -v \
-o ${binary} \
-ldflags="-X main.appVersion=$(shell git describe --tags --long --dirty) -X main.commitID=$(shell git rev-parse HEAD)"

run: build
cd ${cmd_dir} && \
./${binary} --log-level="*:DEBUG"
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,12 @@ For more details, go [here](https://docs.multiversx.com/sdk-and-tools/proxy/).
- `/v1.0/block/:shardID/by-nonce/:nonce?withTxs=true` (GET) --> returns a block by nonce, with transactions included
- `/v1.0/block/:shardID/by-hash/:hash` (GET) --> returns a block by hash
- `/v1.0/block/:shardID/by-hash/:hash?withTxs=true` (GET) --> returns a block by hash, with transactions included
- `/v1.0/block/:shardID/altered-accounts/by-nonce/:nonce` (GET) --> returns altered accounts in the given block by nonce
- `/v1.0/block/:shardID/altered-accounts/by-nonce/:nonce?tokens=token1,token2` (GET) --> returns altered accounts in the given block by nonce, filtered out by given tokens
- `/v1.0/block/:shardID/altered-accounts/by-hash/:hash` (GET) --> returns altered accounts in the given block by hash
- `/v1.0/block/:shardID/altered-accounts/by-hash/:hash?tokens=token1,token2` (GET) --> returns altered accounts in the given block by hash, filtered out by given tokens

Please note that `altered-accounts` endpoints will only work if the backing observers of the Proxy have support for historical balances (`--operation-mode historical-balances` when starting the node)

### blocks

Expand All @@ -84,7 +90,9 @@ For more details, go [here](https://docs.multiversx.com/sdk-and-tools/proxy/).
### hyperblock

- `/v1.0/hyperblock/by-nonce/:nonce` (GET) --> returns a hyperblock by nonce, with transactions included
- `/v1.0/hyperblock/by-nonce/:nonce?withAlteredAccounts=true` (GET) --> returns a hyperblock by nonce, with transactions and altered accounts in each notarized block. Other available query parameters are `&tokens=token1,token2` as described in the `block` section above
- `/v1.0/hyperblock/by-hash/:hash` (GET) --> returns a hyperblock by hash, with transactions included
- `/v1.0/hyperblock/by-hash/:hash?withAlteredAccounts=true` (GET) --> returns a hyperblock by hash, with transactions and altered accounts in each notarized block. Other available query parameters are `&tokens=token1,token2` as described in the `block` section above

# V_next

Expand Down
23 changes: 15 additions & 8 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,18 @@ import (
"reflect"
"time"

"github.com/ElrondNetwork/elrond-go-core/hashing"
"github.com/ElrondNetwork/elrond-go-core/hashing/factory"
"github.com/ElrondNetwork/elrond-go-core/hashing/sha256"
logger "github.com/ElrondNetwork/elrond-go-logger"
"github.com/ElrondNetwork/elrond-proxy-go/api/middleware"
"github.com/ElrondNetwork/elrond-proxy-go/config"
"github.com/ElrondNetwork/elrond-proxy-go/data"
"github.com/gin-contrib/cors"
"github.com/gin-contrib/pprof"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/multiversx/mx-chain-core-go/hashing"
"github.com/multiversx/mx-chain-core-go/hashing/factory"
"github.com/multiversx/mx-chain-core-go/hashing/sha256"
logger "github.com/multiversx/mx-chain-logger-go"
"github.com/multiversx/mx-chain-proxy-go/api/middleware"
"github.com/multiversx/mx-chain-proxy-go/config"
"github.com/multiversx/mx-chain-proxy-go/data"
"gopkg.in/go-playground/validator.v8"
)

Expand All @@ -37,6 +38,7 @@ func CreateServer(
statusMetricsExtractor middleware.StatusMetricsExtractor,
rateLimitTimeWindowInSeconds int,
isProfileModeActivated bool,
shouldStartSwaggerUI bool,
) (*http.Server, error) {
ws := gin.Default()
ws.Use(cors.Default())
Expand All @@ -46,7 +48,7 @@ func CreateServer(
return nil, err
}

err = registerRoutes(ws, versionsRegistry, apiLoggingConfig, credentialsConfig, statusMetricsExtractor, rateLimitTimeWindowInSeconds, isProfileModeActivated)
err = registerRoutes(ws, versionsRegistry, apiLoggingConfig, credentialsConfig, statusMetricsExtractor, rateLimitTimeWindowInSeconds, isProfileModeActivated, shouldStartSwaggerUI)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -82,12 +84,17 @@ func registerRoutes(
statusMetricsExtractor middleware.StatusMetricsExtractor,
rateLimitTimeWindowInSeconds int,
isProfileModeActivated bool,
shouldStartSwaggerUI bool,
) error {
versionsMap, err := versionsRegistry.GetAllVersions()
if err != nil {
return err
}

if shouldStartSwaggerUI {
ws.Use(static.ServeRoot("/", "config/swagger"))
}

if apiLoggingConfig.LoggingEnabled {
responseLoggerMiddleware := middleware.NewResponseLoggerMiddleware(time.Duration(apiLoggingConfig.ThresholdInMicroSeconds) * time.Microsecond)
ws.Use(responseLoggerMiddleware.MiddlewareHandlerFunc())
Expand Down
12 changes: 9 additions & 3 deletions api/apiHandler.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package api

import (
"github.com/ElrondNetwork/elrond-go-core/core/check"
"github.com/ElrondNetwork/elrond-proxy-go/api/groups"
"github.com/ElrondNetwork/elrond-proxy-go/data"
"github.com/multiversx/mx-chain-core-go/core/check"
"github.com/multiversx/mx-chain-proxy-go/api/groups"
"github.com/multiversx/mx-chain-proxy-go/data"
)

// apiHandler will handle the groups specific to an API version
Expand Down Expand Up @@ -99,6 +99,11 @@ func initBaseGroupsWithFacade(facade data.FacadeHandler) (map[string]data.GroupH
return nil, err
}

aboutGroup, err := groups.NewAboutGroup(facade)
if err != nil {
return nil, err
}

return map[string]data.GroupHandler{
"/actions": actionsGroup,
"/address": accountsGroup,
Expand All @@ -114,6 +119,7 @@ func initBaseGroupsWithFacade(facade data.FacadeHandler) (map[string]data.GroupH
"/validator": validatorsGroup,
"/vm-values": vmValuesGroup,
"/proof": proofGroup,
"/about": aboutGroup,
}, nil
}

Expand Down
3 changes: 3 additions & 0 deletions api/errors/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ var ErrValidation = errors.New("validation error")
// ErrBadUrlParams signals one or more incorrectly provided URL params (generic error)
var ErrBadUrlParams = errors.New("bad url parameter(s)")

// ErrGetCodeHash signals an error in fetching the code hash for an account
var ErrGetCodeHash = errors.New("cannot get code hash")

// ErrValidationQueryParameterWithResult signals that an invalid query parameter has been provided
var ErrValidationQueryParameterWithResult = errors.New("invalid query parameter withResults")

Expand Down
43 changes: 43 additions & 0 deletions api/groups/baseAboutGroup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package groups

import (
"net/http"

"github.com/gin-gonic/gin"
"github.com/multiversx/mx-chain-proxy-go/api/shared"
"github.com/multiversx/mx-chain-proxy-go/data"
)

type aboutGroup struct {
facade AboutFacadeHandler
*baseGroup
}

// NewAboutGroup returns a new instance of aboutGroup
func NewAboutGroup(facadeHandler data.FacadeHandler) (*aboutGroup, error) {
facade, ok := facadeHandler.(AboutFacadeHandler)
if !ok {
return nil, ErrWrongTypeAssertion
}
ag := &aboutGroup{
facade: facade,
baseGroup: &baseGroup{},
}

baseRoutesHandlers := []*data.EndpointHandlerData{
{Path: "", Handler: ag.getAboutInfo, Method: http.MethodGet},
}
ag.baseGroup.endpoints = baseRoutesHandlers

return ag, nil
}

func (ag *aboutGroup) getAboutInfo(c *gin.Context) {
aboutInfo, err := ag.facade.GetAboutInfo()
if err != nil {
shared.RespondWith(c, http.StatusInternalServerError, nil, err.Error(), data.ReturnCodeInternalError)
return
}

c.JSON(http.StatusOK, aboutInfo)
}
71 changes: 71 additions & 0 deletions api/groups/baseAboutGroup_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package groups_test

import (
"net/http"
"net/http/httptest"
"testing"

"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"
)

type aboutResponse struct {
Data data.AboutInfo `json:"data"`
Error string `json:"error"`
Code string `json:"code"`
}

func TestNewAboutGroup(t *testing.T) {
t.Parallel()

t.Run("wrong facade, should fail", func(t *testing.T) {
t.Parallel()

wrongFacade := &mock.WrongFacade{}
group, err := groups.NewAboutGroup(wrongFacade)
require.Nil(t, group)
require.Equal(t, groups.ErrWrongTypeAssertion, err)
})

t.Run("should work", func(t *testing.T) {
t.Parallel()

group, err := groups.NewAboutGroup(&mock.FacadeStub{})
require.Nil(t, err)
require.NotNil(t, group)
})
}

func TestAboutGroup_GetAboutInfo(t *testing.T) {
t.Parallel()

commitID := "commitID"
version := "appVersion"

facade := &mock.FacadeStub{
GetAboutInfoCalled: func() (*data.GenericAPIResponse, error) {
return &data.GenericAPIResponse{
Data: data.AboutInfo{AppVersion: version, CommitID: commitID},
}, nil
},
}
aboutGroup, err := groups.NewAboutGroup(facade)
require.NoError(t, err)

ws := startProxyServer(aboutGroup, "/about")

req, _ := http.NewRequest("GET", "/about", nil)
resp := httptest.NewRecorder()
ws.ServeHTTP(resp, req)

apiResp := aboutResponse{}
loadResponse(resp.Body, &apiResp)

assert.Equal(t, http.StatusOK, resp.Code)
assert.Equal(t, apiResp.Data.AppVersion, version)
assert.Equal(t, apiResp.Data.CommitID, commitID)
assert.Empty(t, apiResp.Error)
}
28 changes: 24 additions & 4 deletions api/groups/baseAccountsGroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import (
"fmt"
"net/http"

"github.com/ElrondNetwork/elrond-proxy-go/api/errors"
"github.com/ElrondNetwork/elrond-proxy-go/api/shared"
"github.com/ElrondNetwork/elrond-proxy-go/data"
"github.com/gin-gonic/gin"
"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 accountsGroup struct {
Expand All @@ -33,6 +33,7 @@ func NewAccountsGroup(facadeHandler data.FacadeHandler) (*accountsGroup, error)
{Path: "/:address/username", Handler: ag.getUsername, Method: http.MethodGet},
{Path: "/:address/nonce", Handler: ag.getNonce, Method: http.MethodGet},
{Path: "/:address/shard", Handler: ag.getShard, Method: http.MethodGet},
{Path: "/:address/code-hash", Handler: ag.getCodeHash, Method: http.MethodGet},
{Path: "/:address/transactions", Handler: ag.getTransactions, Method: http.MethodGet},
{Path: "/:address/keys", Handler: ag.getKeyValuePairs, Method: http.MethodGet},
{Path: "/:address/key/:key", Handler: ag.getValueForKey, Method: http.MethodGet},
Expand Down Expand Up @@ -106,6 +107,24 @@ func (group *accountsGroup) getNonce(c *gin.Context) {
})
}

// getCodeHash returns the code hash for the address parameter
func (group *accountsGroup) getCodeHash(c *gin.Context) {
address := c.Param("address")
options, err := parseAccountQueryOptions(c)
if err != nil {
shared.RespondWithValidationError(c, errors.ErrBadUrlParams, err)
return
}

codeHashResponse, err := group.facade.GetCodeHash(address, options)
if err != nil {
shared.RespondWithInternalError(c, errors.ErrGetCodeHash, err)
return
}

c.JSON(http.StatusOK, codeHashResponse)
}

// getTransactions returns the transactions for the address parameter
func (group *accountsGroup) getTransactions(c *gin.Context) {
transactions, status, err := group.getTransactionsFromFacade(c)
Expand Down Expand Up @@ -214,7 +233,8 @@ func (group *accountsGroup) getESDTTokenData(c *gin.Context) {

esdtTokenResponse, err := group.facade.GetESDTTokenData(addr, tokenIdentifier, options)
if err != nil {
shared.RespondWithInternalError(c, errors.ErrEmptyTokenIdentifier, err)
shared.RespondWithInternalError(c, errors.ErrGetESDTTokenData, err)
return
}

c.JSON(http.StatusOK, esdtTokenResponse)
Expand Down
Loading