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"
|
2023-01-27 07:58:37 -08:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/handlers/vaa"
|
2022-11-17 07:37:29 -08:00
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/middleware"
|
|
|
|
"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 {
|
2023-01-27 07:58:37 -08:00
|
|
|
srv *vaa.Service
|
2022-11-17 07:37:29 -08:00
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
2022-11-23 04:06:29 -08:00
|
|
|
// NewController create a new controler.
|
2023-01-27 07:58:37 -08:00
|
|
|
func NewController(serv *vaa.Service, logger *zap.Logger) *Controller {
|
2022-11-17 07:37:29 -08:00
|
|
|
return &Controller{srv: serv, logger: logger.With(zap.String("module", "VaaController"))}
|
|
|
|
}
|
|
|
|
|
2023-01-24 12:58:04 -08:00
|
|
|
// FindAll godoc
|
|
|
|
// @Description Returns all VAAs. Output is paginated and can also be be sorted.
|
|
|
|
// @Tags Wormscan
|
|
|
|
// @ID find-all-vaas
|
|
|
|
// @Param page query integer false "Page number."
|
|
|
|
// @Param pageSize query integer false "Number of elements per page."
|
|
|
|
// @Param sortOrder query string false "Sort results in ascending or descending order." Enums(ASC, DESC)
|
2023-01-26 06:54:41 -08:00
|
|
|
// @Param txHash query string false "Transaction hash of the VAA"
|
2023-01-24 12:58:04 -08:00
|
|
|
// @Success 200 {object} response.Response[[]VaaDoc]
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /api/v1/vaas/ [get]
|
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)
|
2023-01-26 06:54:41 -08:00
|
|
|
txHash, err := middleware.GetTxHash(ctx, c.logger)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
vaas, err := c.srv.FindAll(ctx.Context(), p, txHash)
|
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(vaas)
|
|
|
|
}
|
|
|
|
|
2023-01-24 12:58:04 -08:00
|
|
|
// FindByChain godoc
|
|
|
|
// @Description Returns all the VAAs generated in specific blockchain.
|
|
|
|
// @Tags Wormscan
|
|
|
|
// @ID find-vaas-by-chain
|
|
|
|
// @Param chain_id path integer true "id of the blockchain"
|
|
|
|
// @Param page query integer false "Page number."
|
|
|
|
// @Param pageSize query integer false "Number of elements per page."
|
|
|
|
// @Param sortOrder query string false "Sort results in ascending or descending order." Enums(ASC, DESC)
|
|
|
|
// @Success 200 {object} response.Response[[]VaaDoc]
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /api/v1/vaas/{chain_id} [get]
|
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)
|
|
|
|
}
|
|
|
|
|
2023-01-24 12:58:04 -08:00
|
|
|
// FindByEmitter godoc
|
|
|
|
// @Description Returns all all the VAAs generated by a specific emitter address.
|
|
|
|
// @Tags Wormscan
|
|
|
|
// @ID find-vaas-by-emitter
|
|
|
|
// @Param chain_id path integer true "id of the blockchain"
|
|
|
|
// @Param emitter path string true "address of the emitter"
|
|
|
|
// @Param page query integer false "Page number."
|
|
|
|
// @Param pageSize query integer false "Number of elements per page."
|
|
|
|
// @Param sortOrder query string false "Sort results in ascending or descending order." Enums(ASC, DESC)
|
|
|
|
// @Success 200 {object} response.Response[[]VaaDoc]
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /api/v1/vaas/{chain_id}/{emitter} [get]
|
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)
|
|
|
|
}
|
|
|
|
|
2023-01-24 12:58:04 -08:00
|
|
|
// FindById godoc
|
|
|
|
// @Description Find a VAA by ID.
|
|
|
|
// @Tags Wormscan
|
|
|
|
// @ID find-vaa-by-id
|
|
|
|
// @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"
|
|
|
|
// @Param signer path string true "Signer address"
|
|
|
|
// @Param hash path string true "VAA hash"
|
|
|
|
// @Success 200 {object} response.Response[[]VaaDoc]
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /api/v1/vaas/{chain_id}/{emitter}/{seq}/{signer}/{hash} [get]
|
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-24 12:58:04 -08:00
|
|
|
// GetVaaCount godoc
|
|
|
|
// @Description Returns the total number of VAAs emitted for each blockchain.
|
|
|
|
// @Tags Wormscan
|
|
|
|
// @ID get-vaa-counts
|
|
|
|
// @Success 200 {object} response.Response[[]VaaStats]
|
|
|
|
// @Failure 400
|
|
|
|
// @Failure 500
|
|
|
|
// @Router /api/v1/vaas/vaa-counts [get]
|
2022-11-23 05:15:16 -08:00
|
|
|
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
|
|
|
}
|