62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
package solana
|
|
|
|
import (
|
|
"github.com/certusone/wormhole/node/pkg/common"
|
|
gossipv1 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
|
|
"github.com/certusone/wormhole/node/pkg/query"
|
|
"github.com/certusone/wormhole/node/pkg/supervisor"
|
|
"github.com/certusone/wormhole/node/pkg/watchers"
|
|
"github.com/certusone/wormhole/node/pkg/watchers/interfaces"
|
|
solana_types "github.com/gagliardetto/solana-go"
|
|
solana_rpc "github.com/gagliardetto/solana-go/rpc"
|
|
"github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
)
|
|
|
|
type WatcherConfig struct {
|
|
NetworkID watchers.NetworkID // unique identifier of the network
|
|
ChainID vaa.ChainID // ChainID
|
|
ReceiveObsReq bool // if false, this watcher will not get access to the observation request channel
|
|
Rpc string // RPC URL
|
|
Websocket string // Websocket URL
|
|
Contract string // hex representation of the contract address
|
|
Commitment solana_rpc.CommitmentType
|
|
}
|
|
|
|
func (wc *WatcherConfig) GetNetworkID() watchers.NetworkID {
|
|
return wc.NetworkID
|
|
}
|
|
|
|
func (wc *WatcherConfig) GetChainID() vaa.ChainID {
|
|
return wc.ChainID
|
|
}
|
|
|
|
func (wc *WatcherConfig) RequiredL1Finalizer() watchers.NetworkID {
|
|
return ""
|
|
}
|
|
|
|
func (wc *WatcherConfig) SetL1Finalizer(l1finalizer interfaces.L1Finalizer) {
|
|
// empty
|
|
}
|
|
|
|
func (wc *WatcherConfig) Create(
|
|
msgC chan<- *common.MessagePublication,
|
|
obsvReqC <-chan *gossipv1.ObservationRequest,
|
|
_ <-chan *query.PerChainQueryInternal,
|
|
_ chan<- *query.PerChainQueryResponseInternal,
|
|
_ chan<- *common.GuardianSet,
|
|
env common.Environment,
|
|
) (interfaces.L1Finalizer, supervisor.Runnable, error) {
|
|
solAddress, err := solana_types.PublicKeyFromBase58(wc.Contract)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
if !wc.ReceiveObsReq {
|
|
obsvReqC = nil
|
|
}
|
|
|
|
watcher := NewSolanaWatcher(wc.Rpc, &wc.Websocket, solAddress, wc.Contract, msgC, obsvReqC, wc.Commitment, wc.ChainID)
|
|
|
|
return watcher, watcher.Run, nil
|
|
}
|