/
join.go
74 lines (59 loc) · 1.65 KB
/
join.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
package validator
import (
"context"
"errors"
"fmt"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/spf13/cobra"
"github.com/oasysgames/oasys-pos-cli/cmd/constants"
cmdutils "github.com/oasysgames/oasys-pos-cli/cmd/utils"
"github.com/oasysgames/oasys-pos-cli/contracts"
"github.com/oasysgames/oasys-pos-cli/eth"
"github.com/oasysgames/oasys-pos-cli/utils"
)
var joinCmd = &cobra.Command{
Use: cmdPrefix + "join",
Short: "Join as a validator in the proof-of-stake.",
Run: func(cmd *cobra.Command, args []string) {
operator, err := cmd.Flags().GetString(constants.OperatorFlag)
if err != nil {
utils.Fatal(err)
}
wallet, err := cmdutils.NewEthWallet(cmd)
if err != nil {
utils.Fatal(err)
}
doJoin(wallet, operator)
},
}
func doJoin(wallet *eth.Wallet, operator string) {
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(constants.RpcTimeout))
defer cancel()
txOpts, err := wallet.GetTransactOpts(ctx)
if err != nil {
utils.Fatal(err)
}
stakemanager, err := contracts.NewStakeManager(wallet.Client)
if err != nil {
utils.Fatal(err)
}
result, err := stakemanager.GetValidatorInfo(wallet.GetCallOpts(ctx), wallet.From, common.Big0)
if err != nil {
utils.Fatal(err)
}
to := common.HexToAddress(operator)
if result.Operator == to {
utils.Fatal(errors.New("already joined"))
}
tx, err := stakemanager.JoinValidator(txOpts, to)
if err != nil {
utils.Fatal(err)
}
fmt.Printf("sending (tx: %s)...", tx.Hash().String())
receipt, err := wallet.WaitForTransactionReceipt(ctx, tx.Hash())
if err != nil {
utils.Fatal(err)
}
fmt.Printf(": success with %d gas\n", receipt.GasUsed)
}