wormhole/node/pkg/watchers/evm/config.go

61 lines
2.2 KiB
Go

package evm
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"
eth_common "github.com/ethereum/go-ethereum/common"
"github.com/wormhole-foundation/wormhole/sdk/vaa"
)
type WatcherConfig struct {
NetworkID watchers.NetworkID // human readable name
ChainID vaa.ChainID // ChainID
Rpc string // RPC URL
Contract string // hex representation of the contract address
GuardianSetUpdateChain bool // if `true`, we will retrieve the GuardianSet from this chain and watch this chain for GuardianSet updates
L1FinalizerRequired watchers.NetworkID // (optional)
l1Finalizer interfaces.L1Finalizer
}
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 wc.L1FinalizerRequired
}
func (wc *WatcherConfig) SetL1Finalizer(l1finalizer interfaces.L1Finalizer) {
wc.l1Finalizer = l1finalizer
}
func (wc *WatcherConfig) Create(
msgC chan<- *common.MessagePublication,
obsvReqC <-chan *gossipv1.ObservationRequest,
queryReqC <-chan *query.PerChainQueryInternal,
queryResponseC chan<- *query.PerChainQueryResponseInternal,
setC chan<- *common.GuardianSet,
env common.Environment,
) (interfaces.L1Finalizer, supervisor.Runnable, error) {
// only actually use the guardian set channel if wc.GuardianSetUpdateChain == true
var setWriteC chan<- *common.GuardianSet = nil
if wc.GuardianSetUpdateChain {
setWriteC = setC
}
var devMode bool = (env == common.UnsafeDevNet)
watcher := NewEthWatcher(wc.Rpc, eth_common.HexToAddress(wc.Contract), string(wc.NetworkID), wc.ChainID, msgC, setWriteC, obsvReqC, queryReqC, queryResponseC, devMode)
watcher.SetL1Finalizer(wc.l1Finalizer)
return watcher, watcher.Run, nil
}