Skip to content

Commit 54cb0e6

Browse files
authored
Merge pull request #3481 from CheshireFox/fix/chain-not-found-err
Fix chain not found error
2 parents e415fd6 + 54863e0 commit 54cb0e6

File tree

12 files changed

+88
-73
lines changed

12 files changed

+88
-73
lines changed

packages/isc/chainid.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,19 @@ func ChainIDFromBytes(data []byte) (ret ChainID, err error) {
4545
}
4646

4747
func ChainIDFromString(bech32 string) (ChainID, error) {
48-
_, addr, err := iotago.ParseBech32(bech32)
48+
netPrefix, addr, err := iotago.ParseBech32(bech32)
4949
if err != nil {
5050
return ChainID{}, err
5151
}
5252
if addr.Type() != iotago.AddressAlias {
5353
return ChainID{}, fmt.Errorf("chainID must be an alias address (%s)", bech32)
5454
}
55+
56+
expectedNetPrefix := parameters.L1().Protocol.Bech32HRP
57+
if netPrefix != expectedNetPrefix {
58+
return ChainID{}, fmt.Errorf("invalid network prefix: %s", netPrefix)
59+
}
60+
5561
return ChainIDFromAddress(addr.(*iotago.AliasAddress)), nil
5662
}
5763

packages/isc/chainid_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package isc
33
import (
44
"testing"
55

6+
"github.com/stretchr/testify/require"
7+
68
"github.com/iotaledger/wasp/packages/util/rwutil"
79
)
810

@@ -12,3 +14,10 @@ func TestChainIDSerialization(t *testing.T) {
1214
rwutil.BytesTest(t, chainID, ChainIDFromBytes)
1315
rwutil.StringTest(t, chainID, ChainIDFromString)
1416
}
17+
18+
func TestIncorrectPrefix(t *testing.T) {
19+
chainID := "rms1prxunz807j39nmhzy3gre4hwdlzvdjyrkfn59d27x6xh426y8ajt205mh9g"
20+
_, err := ChainIDFromString(chainID)
21+
22+
require.ErrorContains(t, err, "invalid network prefix: rms")
23+
}

packages/webapi/apierrors/errors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"strings"
88
)
99

10-
func ChainNotFoundError(chainID string) *HTTPError {
11-
return NewHTTPError(http.StatusNotFound, fmt.Sprintf("Chain ID: %v not found", chainID), nil)
10+
func ChainNotFoundError() *HTTPError {
11+
return NewHTTPError(http.StatusNotFound, "Chain ID not found", nil)
1212
}
1313

1414
func UserNotFoundError(username string) *HTTPError {

packages/webapi/controllers/chain/chain.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (c *Controller) getCommitteeInfo(e echo.Context) error {
3434

3535
chain, err := c.chainService.GetChainInfoByChainID(chainID, "")
3636
if err != nil {
37-
return apierrors.ChainNotFoundError(chainID.String())
37+
return apierrors.ChainNotFoundError()
3838
}
3939

4040
chainNodeInfo, err := c.committeeService.GetCommitteeInfo(chainID)

packages/webapi/controllers/controllerutils/controllerutils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func ChainIDFromParams(c echo.Context, cs interfaces.ChainService) (isc.ChainID,
2323
}
2424

2525
if !cs.HasChain(chainID) {
26-
return isc.ChainID{}, apierrors.ChainNotFoundError(chainID.String())
26+
return isc.ChainID{}, apierrors.ChainNotFoundError()
2727
}
2828
// set chainID to be used by the prometheus metrics
2929
c.Set(EchoContextKeyChainID, chainID)

packages/webapi/controllers/corecontracts/accounts.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import (
1515
)
1616

1717
func (c *Controller) getTotalAssets(e echo.Context) error {
18-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
18+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
1919
if err != nil {
20-
return c.handleViewCallError(err, chainID)
20+
return c.handleViewCallError(err)
2121
}
2222

2323
assets, err := corecontracts.GetTotalAssets(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
2424
if err != nil {
25-
return c.handleViewCallError(err, chainID)
25+
return c.handleViewCallError(err)
2626
}
2727

2828
assetsResponse := &models.AssetsResponse{
@@ -34,9 +34,9 @@ func (c *Controller) getTotalAssets(e echo.Context) error {
3434
}
3535

3636
func (c *Controller) getAccountBalance(e echo.Context) error {
37-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
37+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
3838
if err != nil {
39-
return c.handleViewCallError(err, chainID)
39+
return c.handleViewCallError(err)
4040
}
4141

4242
agentID, err := params.DecodeAgentID(e)
@@ -46,7 +46,7 @@ func (c *Controller) getAccountBalance(e echo.Context) error {
4646

4747
assets, err := corecontracts.GetAccountBalance(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
4848
if err != nil {
49-
return c.handleViewCallError(err, chainID)
49+
return c.handleViewCallError(err)
5050
}
5151

5252
assetsResponse := &models.AssetsResponse{
@@ -58,9 +58,9 @@ func (c *Controller) getAccountBalance(e echo.Context) error {
5858
}
5959

6060
func (c *Controller) getAccountNFTs(e echo.Context) error {
61-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
61+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
6262
if err != nil {
63-
return c.handleViewCallError(err, chainID)
63+
return c.handleViewCallError(err)
6464
}
6565

6666
agentID, err := params.DecodeAgentID(e)
@@ -70,7 +70,7 @@ func (c *Controller) getAccountNFTs(e echo.Context) error {
7070

7171
nfts, err := corecontracts.GetAccountNFTs(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
7272
if err != nil {
73-
return c.handleViewCallError(err, chainID)
73+
return c.handleViewCallError(err)
7474
}
7575

7676
nftsResponse := &models.AccountNFTsResponse{
@@ -85,9 +85,9 @@ func (c *Controller) getAccountNFTs(e echo.Context) error {
8585
}
8686

8787
func (c *Controller) getAccountFoundries(e echo.Context) error {
88-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
88+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
8989
if err != nil {
90-
return c.handleViewCallError(err, chainID)
90+
return c.handleViewCallError(err)
9191
}
9292
agentID, err := params.DecodeAgentID(e)
9393
if err != nil {
@@ -96,7 +96,7 @@ func (c *Controller) getAccountFoundries(e echo.Context) error {
9696

9797
foundries, err := corecontracts.GetAccountFoundries(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
9898
if err != nil {
99-
return c.handleViewCallError(err, chainID)
99+
return c.handleViewCallError(err)
100100
}
101101

102102
return e.JSON(http.StatusOK, &models.AccountFoundriesResponse{
@@ -105,9 +105,9 @@ func (c *Controller) getAccountFoundries(e echo.Context) error {
105105
}
106106

107107
func (c *Controller) getAccountNonce(e echo.Context) error {
108-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
108+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
109109
if err != nil {
110-
return c.handleViewCallError(err, chainID)
110+
return c.handleViewCallError(err)
111111
}
112112

113113
agentID, err := params.DecodeAgentID(e)
@@ -117,7 +117,7 @@ func (c *Controller) getAccountNonce(e echo.Context) error {
117117

118118
nonce, err := corecontracts.GetAccountNonce(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
119119
if err != nil {
120-
return c.handleViewCallError(err, chainID)
120+
return c.handleViewCallError(err)
121121
}
122122

123123
nonceResponse := &models.AccountNonceResponse{
@@ -128,9 +128,9 @@ func (c *Controller) getAccountNonce(e echo.Context) error {
128128
}
129129

130130
func (c *Controller) getNFTData(e echo.Context) error {
131-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
131+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
132132
if err != nil {
133-
return c.handleViewCallError(err, chainID)
133+
return c.handleViewCallError(err)
134134
}
135135

136136
nftID, err := params.DecodeNFTID(e)
@@ -140,7 +140,7 @@ func (c *Controller) getNFTData(e echo.Context) error {
140140

141141
nftData, err := corecontracts.GetNFTData(ch, *nftID, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
142142
if err != nil {
143-
return c.handleViewCallError(err, chainID)
143+
return c.handleViewCallError(err)
144144
}
145145

146146
nftDataResponse := isc.NFTToJSONObject(nftData)
@@ -149,14 +149,14 @@ func (c *Controller) getNFTData(e echo.Context) error {
149149
}
150150

151151
func (c *Controller) getNativeTokenIDRegistry(e echo.Context) error {
152-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
152+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
153153
if err != nil {
154-
return c.handleViewCallError(err, chainID)
154+
return c.handleViewCallError(err)
155155
}
156156

157157
registries, err := corecontracts.GetNativeTokenIDRegistry(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
158158
if err != nil {
159-
return c.handleViewCallError(err, chainID)
159+
return c.handleViewCallError(err)
160160
}
161161

162162
nativeTokenIDRegistryResponse := &models.NativeTokenIDRegistryResponse{
@@ -171,9 +171,9 @@ func (c *Controller) getNativeTokenIDRegistry(e echo.Context) error {
171171
}
172172

173173
func (c *Controller) getFoundryOutput(e echo.Context) error {
174-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
174+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
175175
if err != nil {
176-
return c.handleViewCallError(err, chainID)
176+
return c.handleViewCallError(err)
177177
}
178178

179179
serialNumber, err := params.DecodeUInt(e, "serialNumber")
@@ -183,7 +183,7 @@ func (c *Controller) getFoundryOutput(e echo.Context) error {
183183

184184
foundryOutput, err := corecontracts.GetFoundryOutput(ch, uint32(serialNumber), e.QueryParam(params.ParamBlockIndexOrTrieRoot))
185185
if err != nil {
186-
return c.handleViewCallError(err, chainID)
186+
return c.handleViewCallError(err)
187187
}
188188

189189
foundryOutputID, err := foundryOutput.ID()

packages/webapi/controllers/corecontracts/blob.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ type BlobValueResponse struct {
2626
}
2727

2828
func (c *Controller) getBlobValue(e echo.Context) error {
29-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
29+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
3030
if err != nil {
31-
return c.handleViewCallError(err, chainID)
31+
return c.handleViewCallError(err)
3232
}
3333

3434
blobHash, err := params.DecodeBlobHash(e)
@@ -40,7 +40,7 @@ func (c *Controller) getBlobValue(e echo.Context) error {
4040

4141
blobValueBytes, err := corecontracts.GetBlobValue(ch, *blobHash, fieldKey, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
4242
if err != nil {
43-
return c.handleViewCallError(err, chainID)
43+
return c.handleViewCallError(err)
4444
}
4545

4646
blobValueResponse := &BlobValueResponse{
@@ -57,9 +57,9 @@ type BlobInfoResponse struct {
5757
func (c *Controller) getBlobInfo(e echo.Context) error {
5858
fmt.Println("GET BLOB INFO")
5959

60-
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
60+
ch, _, err := controllerutils.ChainFromParams(e, c.chainService)
6161
if err != nil {
62-
return c.handleViewCallError(err, chainID)
62+
return c.handleViewCallError(err)
6363
}
6464

6565
blobHash, err := params.DecodeBlobHash(e)
@@ -69,7 +69,7 @@ func (c *Controller) getBlobInfo(e echo.Context) error {
6969

7070
blobInfo, ok, err := corecontracts.GetBlobInfo(ch, *blobHash, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
7171
if err != nil {
72-
return c.handleViewCallError(err, chainID)
72+
return c.handleViewCallError(err)
7373
}
7474

7575
fmt.Printf("GET BLOB INFO: ok:%v, err:%v", ok, err)

0 commit comments

Comments
 (0)