208 lines
8.2 KiB
Go
208 lines
8.2 KiB
Go
// Package governor handle the request of governor data from governor endpoint defined in the api.
|
|
package governor
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/api/internal/mongo"
|
|
"github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
)
|
|
|
|
// GovConfigPage represent a governor configuration.
|
|
type GovConfig struct {
|
|
ID string `bson:"_id" json:"id"`
|
|
CreatedAt *time.Time `bson:"createdAt" json:"createdAt"`
|
|
UpdatedAt *time.Time `bson:"updatedAt" json:"updatedAt"`
|
|
NodeName string `bson:"nodename" json:"nodeName"`
|
|
Counter int `bson:"counter" json:"counter"`
|
|
Chains []*GovConfigChains `bson:"chains" json:"chains"`
|
|
Tokens []*GovConfigfTokens `bson:"tokens" json:"tokens"`
|
|
}
|
|
|
|
type GovConfigChains struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
NotionalLimit mongo.Uint64 `bson:"notionallimit" json:"notionalLimit"`
|
|
BigTransactionSize mongo.Uint64 `bson:"bigtransactionsize" json:"bigTransactionSize"`
|
|
}
|
|
|
|
type GovConfigfTokens struct {
|
|
OriginChainID int `bson:"originchainid" json:"originChainId"`
|
|
OriginAddress string `bson:"originaddress" json:"originAddress"`
|
|
Price float32 `bson:"price" json:"price"`
|
|
}
|
|
|
|
// GovStatusPage represent a governor status.
|
|
type GovStatus struct {
|
|
ID string `bson:"_id" json:"id"`
|
|
CreatedAt *time.Time `bson:"createdAt" json:"createdAt"`
|
|
UpdatedAt *time.Time `bson:"updatedAt" json:"updatedAt"`
|
|
NodeName string `bson:"nodename" json:"nodeName"`
|
|
Chains []*GovStatusChains `bson:"chains" json:"chains"`
|
|
}
|
|
|
|
type GovStatusChains struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
RemainingAvailableNotional mongo.Uint64 `bson:"remainingavailablenotional" json:"remainingAvailableNotional"`
|
|
Emitters []*GovStatusChainEmitter `bson:"emitters" json:"emitters"`
|
|
}
|
|
|
|
type GovStatusChainEmitter struct {
|
|
EmitterAddress string `bson:"emitteraddress" json:"emitterAddress"`
|
|
TotalEnqueuedVaas mongo.Uint64 `bson:"totalenqueuedvaas" json:"totalEnqueuedVaas"`
|
|
EnqueuedVass interface{} `bson:"enqueuedvaas" json:"enqueuedVaas"`
|
|
}
|
|
|
|
// NotionalLimit represent the notional limit value and maximun tranasction size for a chainID.
|
|
type NotionalLimit struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
NotionalLimit *mongo.Uint64 `bson:"notionalLimit" json:"notionalLimit"`
|
|
MaxTrasactionSize *mongo.Uint64 `bson:"maxTransactionSize" json:"maxTransactionSize"`
|
|
}
|
|
|
|
// NotionalLimitDetail represent a notional limit value
|
|
type NotionalLimitDetail struct {
|
|
ID string `bson:"_id" json:"id"`
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
NodeName string `bson:"nodename" json:"nodeName"`
|
|
NotionalLimit *mongo.Uint64 `bson:"notionalLimit" json:"notionalLimit"`
|
|
MaxTrasactionSize *mongo.Uint64 `bson:"maxTransactionSize" json:"maxTransactionSize"`
|
|
CreatedAt *time.Time `bson:"createdAt" json:"createdAt"`
|
|
UpdatedAt *time.Time `bson:"updatedAt" json:"updatedAt"`
|
|
}
|
|
|
|
// NotionalAvailable represent the available notional for chainID.
|
|
type NotionalAvailable struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
AvailableNotional *mongo.Uint64 `bson:"availableNotional" json:"availableNotional"`
|
|
}
|
|
|
|
// NotionalAvailableDetail represent a notional available value.
|
|
type NotionalAvailableDetail struct {
|
|
ID string `bson:"_id" json:"id"`
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
NodeName string `bson:"nodeName" json:"nodeName"`
|
|
NotionalAvailable *mongo.Uint64 `bson:"availableNotional" json:"availableNotional"`
|
|
CreatedAt *time.Time `bson:"createdAt" json:"createdAt"`
|
|
UpdatedAt *time.Time `bson:"updatedAt" json:"updatedAt"`
|
|
}
|
|
|
|
type Emitter struct {
|
|
Address string `bson:"emitteraddress" json:"emitterAddress"`
|
|
TotalEnqueuedVaas mongo.Uint64 `bson:"totalenqueuedvaas" json:"totalEnqueuedVaas"`
|
|
EnqueuedVaas []EnqueuedVAA `bson:"enqueuedvaas" json:"enqueuedVaas"`
|
|
}
|
|
|
|
// EnqueuedVAA definition.
|
|
type EnqueuedVAA struct {
|
|
Sequence string `bson:"sequence" json:"sequence"`
|
|
ReleaseTime *time.Time `bson:"releasetime" json:"releaseTime"`
|
|
Notional *mongo.Uint64 `bson:"notionalvalue" json:"notionalValue"`
|
|
TxHash string `bson:"txhash" json:"txHash"`
|
|
}
|
|
|
|
// MaxNotionalAvailableRecord definition.
|
|
type MaxNotionalAvailableRecord struct {
|
|
ID string `bson:"_id" json:"id"`
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
NodeName string `bson:"nodeName" json:"nodeName"`
|
|
NotionalAvailable *mongo.Uint64 `bson:"availableNotional" json:"availableNotional"`
|
|
Emitters []Emitter `bson:"emitters" json:"emitters"`
|
|
CreatedAt *time.Time `bson:"createdAt" json:"createdAt"`
|
|
UpdatedAt *time.Time `bson:"updatedAt" json:"updatedAt"`
|
|
}
|
|
|
|
// EnqueuedVaa definition.
|
|
type EnqueuedVaa struct {
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
EmitterAddress string `bson:"emitterAddress" json:"emitterAddress"`
|
|
Sequence string `bson:"sequence" json:"sequence"`
|
|
NotionalValue int64 `bson:"notionalValue" json:"notionalValue"`
|
|
TxHash string `bson:"txHash" json:"txHash"`
|
|
}
|
|
|
|
// MarshalJSON interface implementation.
|
|
func (v *EnqueuedVaa) MarshalJSON() ([]byte, error) {
|
|
sequence, err := strconv.ParseUint(v.Sequence, 10, 64)
|
|
if err != nil {
|
|
return []byte{}, err
|
|
}
|
|
|
|
type Alias EnqueuedVaa
|
|
return json.Marshal(&struct {
|
|
Sequence uint64 `json:"sequence"`
|
|
*Alias
|
|
}{
|
|
Sequence: sequence,
|
|
Alias: (*Alias)(v),
|
|
})
|
|
}
|
|
|
|
// EnqueuedVaas definition.
|
|
type EnqueuedVaas struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
EnqueuedVaa []*EnqueuedVaa `bson:"enqueuedVaas" json:"enqueuedVaas"`
|
|
}
|
|
|
|
// EnqueuedVaaDetail definition.
|
|
type EnqueuedVaaDetail struct {
|
|
ChainID vaa.ChainID `bson:"chainid" json:"chainId"`
|
|
EmitterAddress string `bson:"emitterAddress" json:"emitterAddress"`
|
|
Sequence string `bson:"sequence" json:"sequence"`
|
|
NotionalValue int64 `bson:"notionalValue" json:"notionalValue"`
|
|
TxHash string `bson:"txHash" json:"txHash"`
|
|
ReleaseTime int64 `bson:"releaseTime" json:"releaseTime"`
|
|
}
|
|
|
|
// MarshalJSON interface implementation.
|
|
func (v *EnqueuedVaaDetail) MarshalJSON() ([]byte, error) {
|
|
sequence, err := strconv.ParseUint(v.Sequence, 10, 64)
|
|
if err != nil {
|
|
return []byte{}, err
|
|
}
|
|
|
|
type Alias EnqueuedVaaDetail
|
|
return json.Marshal(&struct {
|
|
Sequence uint64 `json:"sequence"`
|
|
*Alias
|
|
}{
|
|
Sequence: sequence,
|
|
Alias: (*Alias)(v),
|
|
})
|
|
}
|
|
|
|
// GovernorLimit definition.
|
|
type GovernorLimit struct {
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
AvailableNotional mongo.Uint64 `bson:"availableNotional" json:"availableNotional"`
|
|
NotionalLimit mongo.Uint64 `bson:"notionalLimit" json:"notionalLimit"`
|
|
MaxTransactionSize mongo.Uint64 `bson:"maxTransactionSize" json:"maxTransactionSize"`
|
|
}
|
|
|
|
// AvailableNotionalByChain definition.
|
|
// This is the structure that is used in guardian api grpc api version.
|
|
type AvailableNotionalByChain struct {
|
|
ChainID vaa.ChainID `bson:"chainId" json:"chainId"`
|
|
AvailableNotional mongo.Uint64 `bson:"availableNotional" json:"remainingAvailableNotional"`
|
|
NotionalLimit mongo.Uint64 `bson:"notionalLimit" json:"notionalLimit"`
|
|
MaxTransactionSize mongo.Uint64 `bson:"maxTransactionSize" json:"bigTransactionSize"`
|
|
}
|
|
|
|
// TokenList definition
|
|
type TokenList struct {
|
|
OriginChainID vaa.ChainID `bson:"originchainid" json:"originChainId"`
|
|
OriginAddress string `bson:"originaddress" json:"originAddress"`
|
|
Price float32 `bson:"price" json:"price"`
|
|
}
|
|
|
|
// EnqueuedVaaItem definition
|
|
type EnqueuedVaaItem struct {
|
|
EmitterChain vaa.ChainID `bson:"chainid" json:"emitterChain"`
|
|
EmitterAddress string `bson:"emitteraddress" json:"emitterAddress"`
|
|
Sequence string `bson:"sequence" json:"sequence"`
|
|
ReleaseTime int64 `bson:"releasetime" json:"releaseTime"`
|
|
NotionalValue mongo.Uint64 `bson:"notionalvalue" json:"notionalValue"`
|
|
TxHash string `bson:"txhash" json:"txHash"`
|
|
}
|