/
monitor.go
109 lines (97 loc) · 3.14 KB
/
monitor.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
package util
import (
"encoding/json"
"strconv"
"strings"
"time"
"github.com/dan13ram/wpokt-validator/app"
"github.com/dan13ram/wpokt-validator/models"
pokt "github.com/dan13ram/wpokt-validator/pokt/client"
"github.com/ethereum/go-ethereum/common"
)
func CreateMint(tx *pokt.TxResponse, memo models.MintMemo, wpoktAddress string, vaultAddress string) models.Mint {
return models.Mint{
Height: strconv.FormatInt(tx.Height, 10),
Confirmations: "0",
TransactionHash: strings.ToLower(tx.Hash),
SenderAddress: strings.ToLower(tx.StdTx.Msg.Value.FromAddress),
SenderChainId: app.Config.Pocket.ChainId,
RecipientAddress: strings.ToLower(memo.Address),
RecipientChainId: memo.ChainId,
WPOKTAddress: strings.ToLower(wpoktAddress),
VaultAddress: strings.ToLower(vaultAddress),
Amount: tx.StdTx.Msg.Value.Amount,
Memo: &memo,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Status: models.StatusPending,
Data: nil,
MintTransactionHash: "",
Signers: []string{},
Signatures: []string{},
}
}
func ValidateMemo(txMemo string) (models.MintMemo, bool) {
var memo models.MintMemo
err := json.Unmarshal([]byte(txMemo), &memo)
if err != nil {
return memo, false
}
address := common.HexToAddress(memo.Address).Hex()
if !strings.EqualFold(address, memo.Address) {
return memo, false
}
if address == common.HexToAddress("").Hex() {
return memo, false
}
memo.Address = address
memoChainId, err := strconv.Atoi(memo.ChainId)
if err != nil {
return memo, false
}
appChainId, err := strconv.Atoi(app.Config.Ethereum.ChainId)
if err != nil {
return memo, false
}
if memoChainId != appChainId {
return memo, false
}
memo.ChainId = app.Config.Ethereum.ChainId
return memo, true
}
func CreateInvalidMint(tx *pokt.TxResponse, vaultAddress string) models.InvalidMint {
return models.InvalidMint{
Height: strconv.FormatInt(tx.Height, 10),
Confirmations: "0",
TransactionHash: strings.ToLower(tx.Hash),
SenderAddress: strings.ToLower(tx.StdTx.Msg.Value.FromAddress),
SenderChainId: app.Config.Pocket.ChainId,
Memo: tx.StdTx.Memo,
Amount: tx.StdTx.Msg.Value.Amount,
VaultAddress: strings.ToLower(vaultAddress),
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Status: models.StatusPending,
Signers: []string{},
ReturnTx: "",
ReturnTxHash: "",
}
}
func CreateFailedMint(tx *pokt.TxResponse, vaultAddress string) models.InvalidMint {
return models.InvalidMint{
Height: strconv.FormatInt(tx.Height, 10),
Confirmations: "0",
TransactionHash: strings.ToLower(tx.Hash),
SenderAddress: strings.ToLower(tx.StdTx.Msg.Value.FromAddress),
SenderChainId: app.Config.Pocket.ChainId,
Memo: tx.StdTx.Memo,
Amount: tx.StdTx.Msg.Value.Amount,
VaultAddress: strings.ToLower(vaultAddress),
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
Status: models.StatusFailed,
Signers: []string{},
ReturnTx: "",
ReturnTxHash: "",
}
}