/
whiteflag.go
58 lines (51 loc) · 2.61 KB
/
whiteflag.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package coreapi
import (
"github.com/labstack/echo/v4"
"github.com/pkg/errors"
"github.com/iotaledger/hornet/v2/pkg/common"
"github.com/iotaledger/hornet/v2/pkg/tangle"
"github.com/iotaledger/inx-app/pkg/httpserver"
iotago "github.com/iotaledger/iota.go/v3"
)
func computeWhiteFlagMutations(c echo.Context) (*ComputeWhiteFlagMutationsResponse, error) {
request := &ComputeWhiteFlagMutationsRequest{}
if err := c.Bind(request); err != nil {
return nil, errors.WithMessagef(httpserver.ErrInvalidParameter, "invalid request, error: %s", err)
}
requestedIndex := request.Index
requestedTimestamp := request.Timestamp
requestedParents, err := iotago.BlockIDsFromHexString(request.Parents)
if err != nil {
return nil, errors.WithMessagef(httpserver.ErrInvalidParameter, "invalid parents, error: %s", err)
}
requestedPreviousMilestoneID := iotago.MilestoneID{}
if len(request.PreviousMilestoneID) > 0 {
previousMilestoneIDBytes, err := iotago.DecodeHex(request.PreviousMilestoneID)
if err != nil {
return nil, errors.WithMessagef(httpserver.ErrInvalidParameter, "invalid previousMilestoneID, error: %s", err)
}
if len(previousMilestoneIDBytes) != iotago.MilestoneIDLength {
return nil, errors.WithMessagef(httpserver.ErrInvalidParameter, "invalid previousMilestoneID, length should be %d bytes", iotago.MilestoneIDLength)
}
copy(requestedPreviousMilestoneID[:], previousMilestoneIDBytes)
}
mutations, err := deps.Tangle.CheckSolidityAndComputeWhiteFlagMutations(Plugin.Daemon().ContextStopped(), requestedIndex, requestedTimestamp, requestedParents, requestedPreviousMilestoneID)
if err != nil {
switch {
case errors.Is(err, common.ErrNodeNotSynced):
return nil, errors.WithMessagef(echo.ErrServiceUnavailable, "failed to compute white flag mutations: %s", err.Error())
case errors.Is(err, tangle.ErrParentsNotGiven):
return nil, errors.WithMessagef(httpserver.ErrInvalidParameter, "failed to compute white flag mutations: %s", err.Error())
case errors.Is(err, tangle.ErrParentsNotSolid):
return nil, errors.WithMessagef(echo.ErrServiceUnavailable, "failed to compute white flag mutations: %s", err.Error())
case errors.Is(err, common.ErrOperationAborted):
return nil, errors.WithMessagef(echo.ErrServiceUnavailable, "failed to compute white flag mutations: %s", err.Error())
default:
return nil, errors.WithMessagef(echo.ErrInternalServerError, "failed to compute white flag mutations: %s", err)
}
}
return &ComputeWhiteFlagMutationsResponse{
InclusionMerkleRoot: iotago.EncodeHex(mutations.InclusionMerkleRoot[:]),
AppliedMerkleRoot: iotago.EncodeHex(mutations.AppliedMerkleRoot[:]),
}, nil
}