-
Notifications
You must be signed in to change notification settings - Fork 3
/
alliance_querier.go
111 lines (93 loc) · 3.38 KB
/
alliance_querier.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
109
110
111
package alliance_provider
import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
"github.com/terra-money/oracle-feeder-go/internal/provider"
types "github.com/terra-money/oracle-feeder-go/internal/types"
pkgtypes "github.com/terra-money/oracle-feeder-go/pkg/types"
)
type alliancesQuerierProvider struct {
feederType types.FeederType
transactionsProvider provider.TransactionsProvider
telegramProvider *provider.TelegramProvider
}
func NewAlliancesQuerierProvider(feederType types.FeederType) *alliancesQuerierProvider {
return &alliancesQuerierProvider{
telegramProvider: provider.NewTelegramProvider(),
feederType: feederType,
transactionsProvider: provider.NewTransactionsProvider(feederType),
}
}
func (a alliancesQuerierProvider) SubmitTx(ctx context.Context) (hash string, err error) {
if a.feederType == types.AllianceOracleFeeder ||
a.feederType == types.AllianceRebalanceFeeder ||
a.feederType == types.AllianceInitialDelegation {
hash, err = a.QueryAndSubmitOnChain(ctx)
} else {
hash, err = a.SubmitOnChain(ctx)
}
if err != nil {
_ = a.telegramProvider.SendError(string(a.feederType), err)
return "", err
}
_ = a.sendSuccessTelegramMessage(hash)
return hash, err
}
func (a alliancesQuerierProvider) QueryAndSubmitOnChain(ctx context.Context) (string, error) {
res, err := a.requestData()
if err != nil {
return "", fmt.Errorf("ERROR querying alliances data %w", err)
}
return a.transactionsProvider.SubmitAlliancesTransaction(ctx, res)
}
func (a alliancesQuerierProvider) SubmitOnChain(ctx context.Context) (string, error) {
var sdkMsg wasmtypes.RawContractMessage
switch a.feederType {
case types.AllianceRebalanceEmissions:
sdkMsg, _ = json.Marshal(pkgtypes.MsgRebalanceEmissions{})
case types.AllianceUpdateRewards:
sdkMsg, _ = json.Marshal(pkgtypes.MsgUpdateRewards{})
}
return a.transactionsProvider.SubmitAlliancesTransaction(ctx, sdkMsg)
}
func (a alliancesQuerierProvider) requestData() (res []byte, err error) {
var url string
if url = os.Getenv("PRICE_SERVER_URL"); len(url) == 0 {
url = "http://localhost:8532"
}
// Send GET request
resp, err := http.Get(url + types.FromFeederTypeToPriceServerUrl(a.feederType))
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Read response body
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
// Access parsed data
return body, nil
}
func (a alliancesQuerierProvider) sendSuccessTelegramMessage(hash string) error {
url := fmt.Sprintf("<a href='https://finder.terra.money/%s/tx/%s'>(transaction)</a>", a.transactionsProvider.ChainId, hash)
var msg string
switch a.feederType {
case types.AllianceRebalanceEmissions:
msg = fmt.Sprintf("<b>[Alliance Hub]</b> Staking rewards rebalanced successfully %s", url)
case types.AllianceUpdateRewards:
msg = fmt.Sprintf("<b>[Alliance Hub]</b> Staking rewards updated successfully %s", url)
case types.AllianceInitialDelegation:
msg = fmt.Sprintf("<b>[Alliance Hub]</b> Initial delegation of `ualliance` tokens successfully %s", url)
case types.AllianceRebalanceFeeder:
msg = fmt.Sprintf("<b>[Alliance Hub]</b> Rebalance `ualliance` delegations successfully %s", url)
case types.AllianceOracleFeeder:
msg = fmt.Sprintf("<b>[Alliance Oracle]</b> Feeded oracle with data successfully %s", url)
}
return a.telegramProvider.SendLog(msg)
}