/
tss-recovery.go
72 lines (61 loc) · 1.6 KB
/
tss-recovery.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
package main
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"os"
. "github.com/decred/dcrd/dcrec/secp256k1"
"github.com/zeta-chain/tss-lib/crypto/vss"
)
func main() {
n := *(flag.Int("n", 3, "signing party size"))
threshold := n - 1
export := flag.String("export", "", "path to export keyfile")
password := flag.String("password", "", "encryption password for keyfile")
flag.Parse()
files := flag.Args()
setupBech32Prefix()
allSecret := make([]KeygenLocalState, len(files))
for i, f := range files {
tssSecret, err := getTssSecretFile(f)
if err != nil {
fmt.Printf("---%v\n", err)
}
allSecret[i] = tssSecret
}
vssShares := make(vss.Shares, len(allSecret))
for i, el := range allSecret {
share := vss.Share{
Threshold: threshold,
ID: el.LocalData.ShareID,
Share: el.LocalData.Xi,
}
vssShares[i] = &share
}
tssPrivateKey, err := vssShares[:n].ReConstruct()
if err != nil {
fmt.Printf("error in tss verify")
}
privKey := NewPrivateKey(tssPrivateKey)
pk := privKey.PubKey()
thorchainpk, address, err := getTssPubKey(pk.X, pk.Y)
if err != nil {
fmt.Printf("--->%v", err)
}
fmt.Printf("---recoverd sk:%v\n", privKey)
fmt.Printf("---recoverd pk:%v\n", thorchainpk)
fmt.Printf("-------%v\n", address)
if len(*export) > 0 && len(*password) >= 8 {
keyfile, err := exportKeyStore(privKey.Serialize(), *password)
if err != nil {
fmt.Printf("--->%v", err)
}
jsonString, _ := json.Marshal(keyfile)
err = ioutil.WriteFile(*export, jsonString, os.ModePerm)
if err != nil {
fmt.Printf("--->%v", err)
}
fmt.Printf("---wrote to: %+v\n", *export)
}
}