2022-11-23 04:06:29 -08:00
|
|
|
// Package observations handle the request of VAA data from governor endpoint defined in the api.
|
2022-11-17 07:37:29 -08:00
|
|
|
package vaa
|
|
|
|
|
|
|
|
import (
|
2022-12-14 11:26:45 -08:00
|
|
|
"strconv"
|
|
|
|
|
2022-11-17 07:37:29 -08:00
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/middleware"
|
2023-01-03 09:42:29 -08:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/response"
|
2022-11-17 07:37:29 -08:00
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// Controller definition.
|
2022-11-17 07:37:29 -08:00
|
|
|
type Controller struct {
|
|
|
|
srv *Service
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// NewController create a new controler.
|
2022-11-17 07:37:29 -08:00
|
|
|
func NewController(serv *Service, logger *zap.Logger) *Controller {
|
|
|
|
return &Controller{srv: serv, logger: logger.With(zap.String("module", "VaaController"))}
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// FindAll handler for the endpoint /vaas/.
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindAll(ctx *fiber.Ctx) error {
|
2022-11-23 04:06:29 -08:00
|
|
|
p := middleware.GetPaginationFromContext(ctx)
|
2022-11-17 07:37:29 -08:00
|
|
|
vaas, err := c.srv.FindAll(ctx.Context(), p)
|
|
|
|
if err != nil {
|
2022-11-23 04:06:29 -08:00
|
|
|
return err
|
2022-11-17 07:37:29 -08:00
|
|
|
}
|
|
|
|
return ctx.JSON(vaas)
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// FindByChain handler for the endpoint /vaas/:chain.
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindByChain(ctx *fiber.Ctx) error {
|
2022-11-23 04:06:29 -08:00
|
|
|
p := middleware.GetPaginationFromContext(ctx)
|
|
|
|
chainID, err := middleware.ExtractChainID(ctx, c.logger)
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
vaas, err := c.srv.FindByChain(ctx.Context(), chainID, p)
|
|
|
|
if err != nil {
|
2022-11-23 04:06:29 -08:00
|
|
|
return err
|
2022-11-17 07:37:29 -08:00
|
|
|
}
|
|
|
|
return ctx.JSON(vaas)
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// FindByEmitter handler for the endpoint /vaas/:chain/:emitter.
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindByEmitter(ctx *fiber.Ctx) error {
|
2022-11-23 04:06:29 -08:00
|
|
|
p := middleware.GetPaginationFromContext(ctx)
|
|
|
|
chainID, emitter, err := middleware.ExtractVAAChainIDEmitter(ctx, c.logger)
|
|
|
|
if err != nil {
|
2022-11-17 07:37:29 -08:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
vaas, err := c.srv.FindByEmitter(ctx.Context(), chainID, *emitter, p)
|
|
|
|
if err != nil {
|
2022-11-23 04:06:29 -08:00
|
|
|
return err
|
2022-11-17 07:37:29 -08:00
|
|
|
}
|
|
|
|
return ctx.JSON(vaas)
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// FindById handler for the endpoint /vaas/:chain/:emitter/:sequence/:signer/:hash.
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindById(ctx *fiber.Ctx) error {
|
2022-11-23 04:06:29 -08:00
|
|
|
chainID, emitter, seq, err := middleware.ExtractVAAParams(ctx, c.logger)
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2022-12-14 11:26:45 -08:00
|
|
|
|
|
|
|
vaa, err := c.srv.FindById(ctx.Context(), chainID, *emitter, strconv.FormatUint(seq, 10))
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
2022-11-23 04:06:29 -08:00
|
|
|
return err
|
2022-11-17 07:37:29 -08:00
|
|
|
}
|
|
|
|
return ctx.JSON(vaa)
|
|
|
|
}
|
|
|
|
|
2023-01-10 07:32:07 -08:00
|
|
|
// FindSignedVAAByID godoc
|
|
|
|
// @Description get a VAA []byte from a chainID, emitter address and sequence.
|
|
|
|
// @Tags Guardian
|
|
|
|
// @ID guardians-find-signed-vaa
|
|
|
|
// @Param chain_id path integer true "id of the blockchain"
|
|
|
|
// @Param emitter path string true "address of the emitter"
|
|
|
|
// @Param seq path integer true "sequence of the vaa"
|
|
|
|
// @Success 200 {object} object{vaaBytes=[]byte}
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /v1/signed_vaa/{chain_id}/{emitter}/{seq} [get]
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindSignedVAAByID(ctx *fiber.Ctx) error {
|
2022-11-23 04:06:29 -08:00
|
|
|
chainID, emitter, seq, err := middleware.ExtractVAAParams(ctx, c.logger)
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2023-01-03 09:42:29 -08:00
|
|
|
|
|
|
|
// check chainID is not Pyth. Pyth message are not stored with the other vaa.
|
|
|
|
if ChainIDPythNet == chainID {
|
|
|
|
return response.NewApiError(ctx, fiber.StatusBadRequest, response.InvalidParam,
|
|
|
|
"not supported for PythNet", nil)
|
|
|
|
}
|
|
|
|
|
2022-12-14 11:26:45 -08:00
|
|
|
vaa, err := c.srv.FindById(ctx.Context(), chainID, *emitter, strconv.FormatUint(seq, 10))
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
response := struct {
|
|
|
|
VaaBytes []byte `json:"vaaBytes"`
|
|
|
|
}{
|
|
|
|
VaaBytes: vaa.Data.Vaa,
|
|
|
|
}
|
|
|
|
return ctx.JSON(response)
|
|
|
|
}
|
|
|
|
|
2023-01-10 07:32:07 -08:00
|
|
|
// FindSignedBatchVAAByID godoc
|
|
|
|
// @Description get a batch of VAA []byte from a chainID, emitter address and sequence.
|
|
|
|
// @Tags Guardian
|
|
|
|
// @ID guardians-find-signed-batch-vaa
|
|
|
|
// @Param chain_id path integer true "id of the blockchain"
|
|
|
|
// @Param emitter path string true "address of the emitter"
|
|
|
|
// @Param seq path integer true "sequence of the vaa"
|
|
|
|
// @Success 200 {object} object{vaaBytes=[]byte}
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /v1/signed_batch_vaa/{chain_id}/{emitter}/sequence/{seq} [get]
|
2023-01-03 09:42:29 -08:00
|
|
|
func (c *Controller) FindSignedBatchVAAByID(ctx *fiber.Ctx) error {
|
|
|
|
return response.NewApiError(ctx, fiber.StatusNotImplemented, response.Unimplemented, "not yet implemented", nil)
|
|
|
|
}
|
|
|
|
|
2022-11-17 07:37:29 -08:00
|
|
|
func (c *Controller) FindForPythnet(ctx *fiber.Ctx) error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2022-11-23 05:15:16 -08:00
|
|
|
// GetVaaCount handler for the endpoint /vaas/vaa-counts.
|
|
|
|
func (c *Controller) GetVaaCount(ctx *fiber.Ctx) error {
|
|
|
|
p := middleware.GetPaginationFromContext(ctx)
|
|
|
|
vaas, err := c.srv.GetVaaCount(ctx.Context(), p)
|
2022-11-17 07:37:29 -08:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2022-11-23 05:15:16 -08:00
|
|
|
return ctx.JSON(vaas)
|
2022-11-17 07:37:29 -08:00
|
|
|
}
|