Selaa lähdekoodia

cmd/clef: bundle 4byte db into clef, (#19112)

* clef: bundle 4byte db into clef, fix #19048

* clef: add go-generate directive, remove internal abidb parser tool

* cmd/clef: extend go generate to format asset file
Martin Holst Swende 6 vuotta sitten
vanhempi
commit
54dfce8af7

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
cmd/clef/4byte.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 71 - 0
cmd/clef/bindata.go


+ 22 - 21
cmd/clef/main.go

@@ -18,6 +18,9 @@
 // arbitrary data.
 package main
 
+//go:generate go-bindata -o bindata.go resources/4byte.json
+//go:generate gofmt -s -w bindata.go
+
 import (
 	"bufio"
 	"context"
@@ -57,16 +60,16 @@ import (
 )
 
 const legalWarning = `
-WARNING! 
+WARNING!
 
-Clef is an account management tool. It may, like any software, contain bugs. 
+Clef is an account management tool. It may, like any software, contain bugs.
 
 Please take care to
-- backup your keystore files, 
+- backup your keystore files,
 - verify that the keystore(s) can be opened with your password.
 
-Clef 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 
+Clef 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 General Public License for more details.
 `
 
@@ -104,11 +107,6 @@ var (
 		Name:  "signersecret",
 		Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash",
 	}
-	dBFlag = cli.StringFlag{
-		Name:  "4bytedb",
-		Usage: "File containing 4byte-identifiers",
-		Value: "./4byte.json",
-	}
 	customDBFlag = cli.StringFlag{
 		Name:  "4bytedb-custom",
 		Usage: "File used for writing new 4byte-identifiers submitted via API",
@@ -145,7 +143,7 @@ var (
 			configdirFlag,
 		},
 		Description: `
-The init command generates a master seed which Clef can use to store credentials and data needed for 
+The init command generates a master seed which Clef can use to store credentials and data needed for
 the rule-engine to work.`,
 	}
 	attestCommand = cli.Command{
@@ -159,10 +157,10 @@ the rule-engine to work.`,
 			signerSecretFlag,
 		},
 		Description: `
-The attest command stores the sha256 of the rule.js-file that you want to use for automatic processing of 
-incoming requests. 
+The attest command stores the sha256 of the rule.js-file that you want to use for automatic processing of
+incoming requests.
 
-Whenever you make an edit to the rule file, you need to use attestation to tell 
+Whenever you make an edit to the rule file, you need to use attestation to tell
 Clef that the file is 'safe' to execute.`,
 	}
 
@@ -177,7 +175,7 @@ Clef that the file is 'safe' to execute.`,
 			signerSecretFlag,
 		},
 		Description: `
-The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will 
+The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will
 remove any stored credential for that address (keyfile)
 `}
 	gendocCommand = cli.Command{
@@ -206,7 +204,6 @@ func init() {
 		utils.RPCEnabledFlag,
 		rpcPortFlag,
 		signerSecretFlag,
-		dBFlag,
 		customDBFlag,
 		auditLogFlag,
 		ruleFlag,
@@ -273,12 +270,12 @@ func initializeSecrets(c *cli.Context) error {
 	}
 	fmt.Printf("A master seed has been generated into %s\n", location)
 	fmt.Printf(`
-This is required to be able to store credentials, such as : 
+This is required to be able to store credentials, such as :
 * Passwords for keystores (used by rule engine)
 * Storage for javascript rules
 * Hash of rule-file
 
-You should treat that file with utmost secrecy, and make a backup of it. 
+You should treat that file with utmost secrecy, and make a backup of it.
 NOTE: This file does not contain your accounts. Those need to be backed up separately!
 
 `)
@@ -365,13 +362,17 @@ func signer(c *cli.Context) error {
 		log.Info("Using CLI as UI-channel")
 		ui = core.NewCommandlineUI()
 	}
-	fourByteDb := c.GlobalString(dBFlag.Name)
+	// 4bytedb data
 	fourByteLocal := c.GlobalString(customDBFlag.Name)
-	db, err := core.NewAbiDBFromFiles(fourByteDb, fourByteLocal)
+	data, err := Asset("resources/4byte.json")
+	if err != nil {
+		utils.Fatalf(err.Error())
+	}
+	db, err := core.NewAbiDBFromFiles(data, fourByteLocal)
 	if err != nil {
 		utils.Fatalf(err.Error())
 	}
-	log.Info("Loaded 4byte db", "signatures", db.Size(), "file", fourByteDb, "local", fourByteLocal)
+	log.Info("Loaded 4byte db", "signatures", db.Size(), "local", fourByteLocal)
 
 	var (
 		api       core.ExternalAPI

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
cmd/clef/resources/4byte.json


+ 7 - 10
signer/core/abihelper.go

@@ -18,6 +18,7 @@ package core
 
 import (
 	"bytes"
+	"encoding/hex"
 	"encoding/json"
 	"fmt"
 	"io/ioutil"
@@ -183,17 +184,13 @@ func NewAbiDBFromFile(path string) (*AbiDb, error) {
 	return db, nil
 }
 
-// NewAbiDBFromFiles loads both the standard signature database and a custom database. The latter will be used
-// to write new values into if they are submitted via the API
-func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) {
+// NewAbiDBFromFiles loads both the standard signature database (resource file)and a custom database.
+// The latter will be used to write new values into if they are submitted via the API
+func NewAbiDBFromFiles(raw []byte, custom string) (*AbiDb, error) {
 
 	db := &AbiDb{make(map[string]string), make(map[string]string), custom}
 	db.customdbPath = custom
 
-	raw, err := ioutil.ReadFile(standard)
-	if err != nil {
-		return nil, err
-	}
 	if err := json.Unmarshal(raw, &db.db); err != nil {
 		return nil, err
 	}
@@ -207,7 +204,6 @@ func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) {
 			return nil, err
 		}
 	}
-
 	return db, nil
 }
 
@@ -217,7 +213,7 @@ func (db *AbiDb) LookupMethodSelector(id []byte) (string, error) {
 	if len(id) < 4 {
 		return "", fmt.Errorf("Expected 4-byte id, got %d", len(id))
 	}
-	sig := common.ToHex(id[:4])
+	sig := hex.EncodeToString(id[:4])
 	if key, exists := db.db[sig]; exists {
 		return key, nil
 	}
@@ -226,6 +222,7 @@ func (db *AbiDb) LookupMethodSelector(id []byte) (string, error) {
 	}
 	return "", fmt.Errorf("Signature %v not found", sig)
 }
+
 func (db *AbiDb) Size() int {
 	return len(db.db)
 }
@@ -255,6 +252,6 @@ func (db *AbiDb) AddSignature(selector string, data []byte) error {
 	if err == nil {
 		return nil
 	}
-	sig := common.ToHex(data[:4])
+	sig := hex.EncodeToString(data[:4])
 	return db.saveCustomAbi(selector, sig)
 }

+ 1 - 1
signer/core/abihelper_test.go

@@ -205,7 +205,7 @@ func TestCustomABI(t *testing.T) {
 		t.Fatal(err)
 	}
 	filename := fmt.Sprintf("%s/4byte_custom.json", d)
-	abidb, err := NewAbiDBFromFiles("../../cmd/clef/4byte.json", filename)
+	abidb, err := NewAbiDBFromFiles([]byte(""), filename)
 	if err != nil {
 		t.Fatal(err)
 	}

+ 1 - 0
signer/core/validation.go

@@ -38,6 +38,7 @@ type Validator struct {
 func NewValidator(db *AbiDb) *Validator {
 	return &Validator{db}
 }
+
 func testSelector(selector string, data []byte) (*decodedCallData, error) {
 	if selector == "" {
 		return nil, fmt.Errorf("selector not found")

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä