forked from smartcontractkit/chainlink-cosmos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelay.go
108 lines (88 loc) · 2.8 KB
/
relay.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package cosmos
import (
"context"
"errors"
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/types"
"github.com/smartcontractkit/chainlink-cosmos/pkg/cosmos/adapters"
"github.com/smartcontractkit/chainlink-cosmos/pkg/cosmos/adapters/cosmwasm"
"github.com/smartcontractkit/chainlink-cosmos/pkg/cosmos/adapters/injective"
"github.com/smartcontractkit/chainlink-cosmos/pkg/cosmos/params"
"github.com/smartcontractkit/chainlink-cosmos/pkg/cosmos/txm"
)
const (
InjectivePrefix string = "inj"
)
// ErrMsgUnsupported is returned when an unsupported type of message is encountered.
// Deprecated: use txm.ErrMsgUnsupported
type ErrMsgUnsupported = txm.ErrMsgUnsupported
var _ types.Relayer = &Relayer{} //nolint:staticcheck
type Relayer struct {
lggr logger.Logger
chain adapters.Chain
ctx context.Context
cancel func()
}
// Note: constructed in core
func NewRelayer(lggr logger.Logger, chain adapters.Chain) *Relayer {
ctx, cancel := context.WithCancel(context.Background())
bech32Prefix := chain.Config().Bech32Prefix()
gasToken := chain.Config().GasToken()
params.InitCosmosSdk(
bech32Prefix,
gasToken,
)
return &Relayer{
lggr: lggr,
chain: chain,
ctx: ctx,
cancel: cancel,
}
}
func (r *Relayer) Name() string {
return r.lggr.Name()
}
// Start starts the relayer respecting the given context.
func (r *Relayer) Start(context.Context) error {
if r.chain == nil {
return errors.New("Cosmos unavailable")
}
return nil
}
func (r *Relayer) Close() error {
r.cancel()
return nil
}
func (r *Relayer) Ready() error {
return r.chain.Ready()
}
func (r *Relayer) HealthReport() map[string]error {
return r.chain.HealthReport()
}
func (r *Relayer) NewMercuryProvider(rargs types.RelayArgs, pargs types.PluginArgs) (types.MercuryProvider, error) {
return nil, errors.New("mercury is not supported for cosmos")
}
func (r *Relayer) NewFunctionsProvider(rargs types.RelayArgs, pargs types.PluginArgs) (types.FunctionsProvider, error) {
return nil, errors.New("functions are not supported for cosmos")
}
func (r *Relayer) NewConfigProvider(args types.RelayArgs) (types.ConfigProvider, error) {
var configProvider types.ConfigProvider
var err error
if r.chain.Config().Bech32Prefix() == InjectivePrefix {
configProvider, err = injective.NewConfigProvider(r.ctx, r.lggr, r.chain, args)
} else {
// Default to cosmwasm adapter
configProvider, err = cosmwasm.NewConfigProvider(r.ctx, r.lggr, r.chain, args)
}
if err != nil {
return nil, err
}
return configProvider, err
}
func (r *Relayer) NewMedianProvider(rargs types.RelayArgs, pargs types.PluginArgs) (types.MedianProvider, error) {
configProvider, err := cosmwasm.NewMedianProvider(r.ctx, r.lggr, r.chain, rargs, pargs)
if err != nil {
return nil, err
}
return configProvider, err
}