80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package domain
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/wormhole-foundation/wormhole-explorer/common/utils"
|
|
"github.com/wormhole-foundation/wormhole-explorer/fly-event-processor/queue"
|
|
sdk "github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
)
|
|
|
|
type Node struct {
|
|
Name string
|
|
Address string
|
|
}
|
|
|
|
type NodeGovernorVaa struct {
|
|
Node
|
|
GovernorVaas map[string]GovernorVaa
|
|
}
|
|
|
|
type GovernorVaa struct {
|
|
ID string
|
|
ChainID sdk.ChainID
|
|
EmitterAddress string
|
|
Sequence string
|
|
TxHash string
|
|
ReleaseTime time.Time
|
|
Amount uint64
|
|
}
|
|
|
|
// ConvertEventToGovernorVaa convert a event *queue.EventGovernorStatus to a *NodeGovernorVaa.
|
|
func ConvertEventToGovernorVaa(event *queue.EventGovernorStatus) *NodeGovernorVaa {
|
|
|
|
// check if event is nil.
|
|
if event == nil {
|
|
return nil
|
|
}
|
|
|
|
// check if chains is empty.
|
|
if len(event.Data.Chains) == 0 {
|
|
return nil
|
|
}
|
|
|
|
governorVaas := make(map[string]GovernorVaa)
|
|
for _, chain := range event.Data.Chains {
|
|
for _, emitter := range chain.Emitters {
|
|
for _, enqueuedVAA := range emitter.EnqueuedVaas {
|
|
|
|
normalizeEmitter := utils.NormalizeHex(emitter.EmitterAddress)
|
|
normalizeTxHash := utils.NormalizeHex(enqueuedVAA.TxHash)
|
|
vaaID := fmt.Sprintf("%d/%s/%s",
|
|
chain.ChainId,
|
|
normalizeEmitter,
|
|
enqueuedVAA.Sequence)
|
|
|
|
gs := GovernorVaa{
|
|
ID: vaaID,
|
|
ChainID: sdk.ChainID(chain.ChainId),
|
|
EmitterAddress: normalizeEmitter,
|
|
Sequence: enqueuedVAA.Sequence,
|
|
TxHash: normalizeTxHash,
|
|
ReleaseTime: time.Unix(int64(enqueuedVAA.ReleaseTime), 0),
|
|
Amount: enqueuedVAA.NotionalValue,
|
|
}
|
|
|
|
governorVaas[vaaID] = gs
|
|
}
|
|
}
|
|
}
|
|
|
|
return &NodeGovernorVaa{
|
|
Node: Node{
|
|
Name: event.Data.NodeName,
|
|
Address: event.Data.NodeAddress,
|
|
},
|
|
GovernorVaas: governorVaas,
|
|
}
|
|
}
|