diff --git a/cmd/clef/bindata.go b/cmd/clef/bindata.go index 7adef55406..4047933d31 100644 --- a/cmd/clef/bindata.go +++ b/cmd/clef/bindata.go @@ -84,7 +84,7 @@ func resources4byteJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "resources/4byte.json", size: 5500821, mode: os.FileMode(0664), modTime: time.Unix(1550345687, 0)} + info := bindataFileInfo{name: "resources/4byte.json", size: 5500821, mode: os.FileMode(0664), modTime: time.Unix(1552398455, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x86, 0xc8, 0x50, 0xc5, 0x1c, 0xeb, 0xbb, 0xd, 0xf9, 0x16, 0x1a, 0xde, 0xa0, 0x5, 0x2f, 0xdd, 0xfe, 0x56, 0x2d, 0xfb, 0x3b, 0xa4, 0x9c, 0xf3, 0x1b, 0xdb, 0xd0, 0x2f, 0xd, 0xc5, 0x12, 0xc1}} return a, nil } diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 4b3d9053b3..d766c7d5a1 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -18,6 +18,8 @@ // arbitrary data. package main +//go:generate go-bindata -o ./bindata.go ./resources/4byte.json + import ( "bufio" "context" diff --git a/cmd/internal/abidbbuilder/abidbbuilder.go b/cmd/internal/abidbbuilder/abidbbuilder.go deleted file mode 100644 index e07bc7dc48..0000000000 --- a/cmd/internal/abidbbuilder/abidbbuilder.go +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package main - -import ( - "bytes" - "encoding/hex" - "encoding/json" - "flag" - "fmt" - "io/ioutil" - "log" - "os" - "strings" - - "github.com/ethereum/go-ethereum/crypto" -) - -var ( - inDir = flag.String("i", "", "input directory to read") - outFile = flag.String("o", "", "file to write to (overwrites if exists)") -) - -func init() { - flag.Usage = func() { - fmt.Fprintln(os.Stderr, "Usage:", os.Args[0], "-i directory -o outputfile") - flag.PrintDefaults() - fmt.Fprintln(os.Stderr, ` -This is a little helper-utility to collect the data from -https://github.com/ethereum-lists/4bytes and massage it into a -clef-digestable format. - -It parses the signatures from the given directory, and writes -them to the given outputfile as a json struct. - -Afterwards, you can do - - [cmd/clef]$ go-bindata resources - -To generatee the bindata.go asset file. -`) - } -} - -func main() { - flag.Parse() - in := *inDir - out := *outFile - if in == "" { - fmt.Fprintf(os.Stderr, "input directory not given\n") - os.Exit(1) - } - if out == "" { - fmt.Fprintf(os.Stderr, "output file not given\n") - os.Exit(1) - } - data, err := readFiles(in) - if err != nil { - fmt.Fprintf(os.Stderr, "error reading data: %v\n", err) - os.Exit(1) - } - err = dumpData(data, out) - if err != nil { - fmt.Fprintf(os.Stderr, "error writing data: %v\n", err) - os.Exit(1) - } -} - -func dumpData(db map[string]string, outfile string) error { - data, err := json.Marshal(db) - if err != nil { - return err - } - fmt.Printf("data size %d kB\n", len(data)/1000) - return ioutil.WriteFile(outfile, data, 0644) - -} -func readFiles(dir string) (map[string]string, error) { - f, err := os.Open(dir) - if err != nil { - log.Fatal(err) - } - files, err := f.Readdir(-1) - f.Close() - if err != nil { - return nil, err - } - db := make(map[string]string) - for _, file := range files { - // Only bother with signature files - sig, err := hex.DecodeString(file.Name()) - if err != nil { - continue - } - if len(sig) != 4 { - fmt.Printf("Invalid sig, wrong length: %x", sig) - } - dat, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", dir, file.Name())) - if err != nil { - fmt.Printf("err reading file: %v\n", err) - continue - } - selectors := strings.Split(string(dat), ";") - if len(selectors) > 1 { - fmt.Printf("sig `%s`\n", sig) - for _, selector := range selectors { - fmt.Printf(" - %v\n", selector) - } - fmt.Println(" -- ignoring this signature\n") - continue - } - selector := strings.TrimSpace(selectors[0]) - // We do a basic sanity check here, not fully verifying the correctness of - // arguments, e.g the parameter types. We assume that the 4byte db comes - // from a somewhat trusted source - want := crypto.Keccak256([]byte(selector))[:4] - if !bytes.Equal(sig, want) { - fmt.Printf("Erroneous selector: %s, have %x want %x", selector, sig, want) - continue - } - db[fmt.Sprintf("%x", sig)] = selector - } - return db, nil -}