1
1
package main
2
2
3
3
import (
4
+ "context"
4
5
"encoding/hex"
5
6
"encoding/json"
6
7
"errors"
@@ -16,35 +17,42 @@ import (
16
17
17
18
"github.com/zeta-chain/zetacore/pkg/chains"
18
19
observertypes "github.com/zeta-chain/zetacore/x/observer/types"
19
- "github.com/zeta-chain/zetacore/zetaclient/context"
20
+ zctx "github.com/zeta-chain/zetacore/zetaclient/context"
20
21
"github.com/zeta-chain/zetacore/zetaclient/metrics"
21
22
mc "github.com/zeta-chain/zetacore/zetaclient/tss"
22
23
"github.com/zeta-chain/zetacore/zetaclient/zetacore"
23
24
)
24
25
25
26
func GenerateTss (
26
- appContext * context.AppContext ,
27
+ ctx context.Context ,
27
28
logger zerolog.Logger ,
28
29
client * zetacore.Client ,
29
30
peers p2p.AddrList ,
30
31
priKey secp256k1.PrivKey ,
31
32
ts * metrics.TelemetryServer ,
32
33
tssHistoricalList []observertypes.TSS ,
33
34
tssPassword string ,
34
- hotkeyPassword string ) (* mc.TSS , error ) {
35
+ hotkeyPassword string ,
36
+ ) (* mc.TSS , error ) {
37
+ app , err := zctx .FromContext (ctx )
38
+ if err != nil {
39
+ return nil , err
40
+ }
41
+
35
42
keygenLogger := logger .With ().Str ("module" , "keygen" ).Logger ()
36
43
37
44
// Bitcoin chain ID is currently used for using the correct signature format
38
45
// TODO: remove this once we have a better way to determine the signature format
39
46
// https://github.com/zeta-chain/node/issues/1397
40
47
bitcoinChainID := chains .BitcoinRegtest .ChainId
41
- btcChain , _ , btcEnabled := appContext .GetBTCChainAndConfig ()
48
+ btcChain , _ , btcEnabled := app .GetBTCChainAndConfig ()
42
49
if btcEnabled {
43
50
bitcoinChainID = btcChain .ChainId
44
51
}
45
52
46
53
tss , err := mc .NewTSS (
47
- appContext ,
54
+ ctx ,
55
+ app ,
48
56
peers ,
49
57
priKey ,
50
58
preParams ,
@@ -74,7 +82,7 @@ func GenerateTss(
74
82
// This loop will try keygen at the keygen block and then wait for keygen to be successfully reported by all nodes before breaking out of the loop.
75
83
// If keygen is unsuccessful, it will reset the triedKeygenAtBlock flag and try again at a new keygen block.
76
84
77
- keyGen := appContext .GetKeygen ()
85
+ keyGen := app .GetKeygen ()
78
86
if keyGen .Status == observertypes .KeygenStatus_KeyGenSuccess {
79
87
return tss , nil
80
88
}
@@ -86,7 +94,7 @@ func GenerateTss(
86
94
// Try generating TSS at keygen block , only when status is pending keygen and generation has not been tried at the block
87
95
if keyGen .Status == observertypes .KeygenStatus_PendingKeygen {
88
96
// Return error if RPC is not working
89
- currentBlock , err := client .GetBlockHeight ()
97
+ currentBlock , err := client .GetBlockHeight (ctx )
90
98
if err != nil {
91
99
keygenLogger .Error ().Err (err ).Msg ("GetBlockHeight RPC error" )
92
100
continue
@@ -101,16 +109,21 @@ func GenerateTss(
101
109
if currentBlock > lastBlock {
102
110
lastBlock = currentBlock
103
111
keygenLogger .Info ().
104
- Msgf ("Waiting For Keygen Block to arrive or new keygen block to be set. Keygen Block : %d Current Block : %d ChainID %s " , keyGen .BlockNumber , currentBlock , appContext .Config ().ChainID )
112
+ Msgf ("Waiting For Keygen Block to arrive or new keygen block to be set. Keygen Block : %d Current Block : %d ChainID %s " , keyGen .BlockNumber , currentBlock , app .Config ().ChainID )
105
113
}
106
114
continue
107
115
}
108
116
// Try keygen only once at a particular block, irrespective of whether it is successful or failure
109
117
triedKeygenAtBlock = true
110
- err = keygenTss (keyGen , tss , keygenLogger )
118
+ err = keygenTss (ctx , keyGen , tss , keygenLogger )
111
119
if err != nil {
112
120
keygenLogger .Error ().Err (err ).Msg ("keygenTss error" )
113
- tssFailedVoteHash , err := client .SetTSS ("" , keyGen .BlockNumber , chains .ReceiveStatus_failed )
121
+ tssFailedVoteHash , err := client .PostVoteTSS (
122
+ ctx ,
123
+ "" ,
124
+ keyGen .BlockNumber ,
125
+ chains .ReceiveStatus_failed ,
126
+ )
114
127
if err != nil {
115
128
keygenLogger .Error ().Err (err ).Msg ("Failed to broadcast Failed TSS Vote to zetacore" )
116
129
return nil , err
@@ -128,7 +141,8 @@ func GenerateTss(
128
141
}
129
142
130
143
// If TSS is successful , broadcast the vote to zetacore and set Pubkey
131
- tssSuccessVoteHash , err := client .SetTSS (
144
+ tssSuccessVoteHash , err := client .PostVoteTSS (
145
+ ctx ,
132
146
newTss .CurrentPubkey ,
133
147
keyGen .BlockNumber ,
134
148
chains .ReceiveStatus_success ,
@@ -155,7 +169,7 @@ func GenerateTss(
155
169
return nil , errors .New ("unexpected state for TSS generation" )
156
170
}
157
171
158
- func keygenTss (keyGen observertypes.Keygen , tss * mc.TSS , keygenLogger zerolog.Logger ) error {
172
+ func keygenTss (ctx context. Context , keyGen observertypes.Keygen , tss * mc.TSS , keygenLogger zerolog.Logger ) error {
159
173
keygenLogger .Info ().Msgf ("Keygen at blocknum %d , TSS signers %s " , keyGen .BlockNumber , keyGen .GranteePubkeys )
160
174
var req keygen.Request
161
175
req = keygen .NewRequest (keyGen .GranteePubkeys , keyGen .BlockNumber , "0.14.0" )
@@ -168,7 +182,12 @@ func keygenTss(keyGen observertypes.Keygen, tss *mc.TSS, keygenLogger zerolog.Lo
168
182
return err
169
183
}
170
184
index := fmt .Sprintf ("keygen-%s-%d" , digest , keyGen .BlockNumber )
171
- zetaHash , err := tss .ZetacoreClient .PostBlameData (& res .Blame , tss .ZetacoreClient .Chain ().ChainId , index )
185
+ zetaHash , err := tss .ZetacoreClient .PostVoteBlameData (
186
+ ctx ,
187
+ & res .Blame ,
188
+ tss .ZetacoreClient .Chain ().ChainId ,
189
+ index ,
190
+ )
172
191
if err != nil {
173
192
keygenLogger .Error ().Err (err ).Msg ("error sending blame data to core" )
174
193
return err
0 commit comments