github.com/JFJun/bsc@v1.0.0/cmd/abidump/main.go (about) 1 // Copyright 2019 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package main 18 19 import ( 20 "encoding/hex" 21 "flag" 22 "fmt" 23 "os" 24 "strings" 25 26 "github.com/JFJun/bsc/signer/core" 27 "github.com/JFJun/bsc/signer/fourbyte" 28 ) 29 30 func init() { 31 flag.Usage = func() { 32 fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "<hexdata>") 33 flag.PrintDefaults() 34 fmt.Fprintln(os.Stderr, ` 35 Parses the given ABI data and tries to interpret it from the fourbyte database.`) 36 } 37 } 38 39 func parse(data []byte) { 40 db, err := fourbyte.New() 41 if err != nil { 42 die(err) 43 } 44 messages := core.ValidationMessages{} 45 db.ValidateCallData(nil, data, &messages) 46 for _, m := range messages.Messages { 47 fmt.Printf("%v: %v\n", m.Typ, m.Message) 48 } 49 } 50 51 // Example 52 // ./abidump a9059cbb000000000000000000000000ea0e2dc7d65a50e77fc7e84bff3fd2a9e781ff5c0000000000000000000000000000000000000000000000015af1d78b58c40000 53 func main() { 54 flag.Parse() 55 56 switch { 57 case flag.NArg() == 1: 58 hexdata := flag.Arg(0) 59 data, err := hex.DecodeString(strings.TrimPrefix(hexdata, "0x")) 60 if err != nil { 61 die(err) 62 } 63 parse(data) 64 default: 65 fmt.Fprintln(os.Stderr, "Error: one argument needed") 66 flag.Usage() 67 os.Exit(2) 68 } 69 } 70 71 func die(args ...interface{}) { 72 fmt.Fprintln(os.Stderr, args...) 73 os.Exit(1) 74 }