/
accountchecksum.go
73 lines (64 loc) · 2.55 KB
/
accountchecksum.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
// Copyright © 2018, 2019 Weald Technology Trading
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"fmt"
"os"
"strings"
"github.com/ethereum/go-ethereum/common"
"github.com/spf13/cobra"
"github.com/engram-network/gramreal/v2/cli"
ens "github.com/wealdtech/go-ens/v3"
)
var (
accountChecksumAddress string
accountChecksumCheck bool
)
// accountChecksumCmd represents the account checksum command.
var accountChecksumCmd = &cobra.Command{
Use: "checksum",
Short: "Generate or verify the checksum for an account",
Long: `Generate or verify the checksum for a provided account address. For example:
gramreal account checksum --address=0x5FfC014343cd971B7eb70732021E26C35B744cc4 --check
In quiet mode this will return 0 if the provided address is correctly checksummed, otherwise 1.`,
Run: func(cmd *cobra.Command, args []string) {
cli.Assert(accountChecksumAddress != "", quiet, "--address is required")
// We don't use the ususal resolution process as we want to ensure that the address is well-formed.
if !strings.HasPrefix(accountChecksumAddress, "0x") {
cli.Err(quiet, "address does not start with 0x")
}
if len(accountChecksumAddress) != 42 {
cli.Err(quiet, "address of incorrect length")
}
address := common.HexToAddress(accountChecksumAddress)
if address == ens.UnknownAddress {
cli.Err(quiet, "could not parse address")
}
checksummedAddress := address.String()
if accountChecksumCheck || quiet {
if accountChecksumAddress != checksummedAddress {
cli.Err(quiet, "checksum is incorrect")
}
outputIf(!quiet, "Checksum is correct")
os.Exit(exitSuccess)
}
fmt.Printf("%s\n", checksummedAddress)
os.Exit(exitSuccess)
},
}
func init() {
offlineCmds["account:checksum"] = true
accountCmd.AddCommand(accountChecksumCmd)
accountChecksumCmd.Flags().StringVar(&accountChecksumAddress, "address", "", "Address of the account for which to verify the checksum")
accountChecksumCmd.Flags().BoolVar(&accountChecksumCheck, "check", false, "Check only; do not print the correctly-checksummed address")
}