-
Notifications
You must be signed in to change notification settings - Fork 40
/
exit_migrate.go
134 lines (121 loc) · 4.61 KB
/
exit_migrate.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package command
import (
"fmt"
"github.com/urfave/cli/v2"
"github.com/bnb-chain/greenfield-storage-provider/util"
virtualgrouptypes "github.com/bnb-chain/greenfield/x/virtualgroup/types"
)
const migrateCommands = "MIGRATE COMMANDS"
var spOperatorAddressFlag = &cli.StringFlag{
Name: "operatorAddress",
Usage: "The operator account address of the storage provider who want to exit from the greenfield storage network",
Required: true,
}
var SPExitCmd = &cli.Command{
Name: "sp.exit",
Usage: "Used for sp exits from the Greenfield storage network",
Description: `Using this command, it will send an transaction to Greenfield blockchain to tell this SP is prepared ` +
`to exit from Greenfield storage network.`,
Category: migrateCommands,
Action: CW.spExit,
Flags: []cli.Flag{
spOperatorAddressFlag,
},
}
func (w *CMDWrapper) spExit(ctx *cli.Context) error {
err := w.init(ctx)
if err != nil {
return err
}
operatorAddress := ctx.String(spOperatorAddressFlag.Name)
if operatorAddress != w.config.SpAccount.SpOperatorAddress {
fmt.Printf("failed to check operator address, actual=%v, expected=%v\n", operatorAddress, w.config.SpAccount.SpOperatorAddress)
return fmt.Errorf("invalid operator address")
}
txHash, err := w.grpcAPI.SPExit(ctx.Context, &virtualgrouptypes.MsgStorageProviderExit{StorageProvider: operatorAddress})
if err != nil {
fmt.Printf("failed to send sp exit tx, operatorAddress: %s, error:%s\n", operatorAddress, err)
return err
}
fmt.Printf("send sp exit txn successfully, txn hash: %s\n", txHash)
return nil
}
/*
The following commands are only used in debug scenarios.
*/
var swapOutFamilyID = &cli.StringFlag{
Name: "familyID",
Usage: "The familyID who intends to swap out",
}
var swapOutGVGIDList = &cli.StringFlag{
Name: "gvgIDList",
Usage: "The gvgIDList who intends to swap out, eg: '1,2,3'",
}
var CompleteSPExitCmd = &cli.Command{
Name: "sp.complete.exit",
Usage: "Only used in debugging scenarios, online use not allowed. Used for sp complete exits from the Greenfield storage network.",
Description: `Using this command, it will send an transaction to Greenfield blockchain to tell this SP is prepared ` +
`to complete exit from Greenfield storage network.`,
Category: migrateCommands,
Action: CW.completeSPExit,
Flags: []cli.Flag{
spOperatorAddressFlag,
},
}
func (w *CMDWrapper) completeSPExit(ctx *cli.Context) error {
err := w.init(ctx)
if err != nil {
return err
}
operatorAddress := ctx.String(spOperatorAddressFlag.Name)
if operatorAddress != w.config.SpAccount.SpOperatorAddress {
fmt.Printf("failed to check operator address, actual=%v, expected=%v\n", operatorAddress, w.config.SpAccount.SpOperatorAddress)
return fmt.Errorf("invalid operator address")
}
txHash, err := w.grpcAPI.CompleteSPExit(ctx.Context, &virtualgrouptypes.MsgCompleteStorageProviderExit{StorageProvider: operatorAddress})
if err != nil {
fmt.Printf("failed to send complete sp exit tx, operatorAddress: %s, error:%s\n", operatorAddress, err)
return err
}
fmt.Printf("send complete sp exit txn successfully, txn hash: %s\n", txHash)
return nil
}
var CompleteSwapOutCmd = &cli.Command{
Name: "sp.complete.swapout",
Usage: "Only used in debugging scenarios, online use not allowed. Used for swap out from the Greenfield storage network.",
Description: `Using this command, it will send an transaction to Greenfield blockchain to tell this SP is prepared ` +
`to swap out from Greenfield storage network.`,
Category: migrateCommands,
Action: CW.completeSwapOut,
Flags: []cli.Flag{
spOperatorAddressFlag,
swapOutFamilyID,
swapOutGVGIDList,
},
}
func (w *CMDWrapper) completeSwapOut(ctx *cli.Context) error {
err := w.init(ctx)
if err != nil {
return err
}
operatorAddress := ctx.String(spOperatorAddressFlag.Name)
if operatorAddress != w.config.SpAccount.SpOperatorAddress {
return fmt.Errorf("invalid operator address")
}
familyID := uint32(ctx.Uint64(ctx.String(swapOutFamilyID.Name)))
gvgIDList, err := util.StringToUint32Slice(ctx.String(swapOutGVGIDList.Name))
if err != nil {
fmt.Printf("failed to send complete swap out tx, operatorAddress: %s, gvgIDList: %s\n", operatorAddress, ctx.String(swapOutGVGIDList.Name))
return err
}
txHash, err := w.grpcAPI.CompleteSwapOut(ctx.Context, &virtualgrouptypes.MsgCompleteSwapOut{
StorageProvider: operatorAddress,
GlobalVirtualGroupFamilyId: familyID,
GlobalVirtualGroupIds: gvgIDList})
if err != nil {
fmt.Printf("failed to send complete swap out txn, operatorAddress: %s\n", operatorAddress)
return err
}
fmt.Printf("send complete swap out txn successfully, txn hash: %s\n", txHash)
return nil
}