forked from cerc-io/plugeth
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
This commit is contained in:
parent
31bc2a2434
commit
54dfce8af7
File diff suppressed because one or more lines are too long
273
cmd/clef/bindata.go
Normal file
273
cmd/clef/bindata.go
Normal file
File diff suppressed because one or more lines are too long
@ -18,6 +18,9 @@
|
|||||||
// arbitrary data.
|
// arbitrary data.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
//go:generate go-bindata -o bindata.go resources/4byte.json
|
||||||
|
//go:generate gofmt -s -w bindata.go
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
@ -104,11 +107,6 @@ var (
|
|||||||
Name: "signersecret",
|
Name: "signersecret",
|
||||||
Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash",
|
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{
|
customDBFlag = cli.StringFlag{
|
||||||
Name: "4bytedb-custom",
|
Name: "4bytedb-custom",
|
||||||
Usage: "File used for writing new 4byte-identifiers submitted via API",
|
Usage: "File used for writing new 4byte-identifiers submitted via API",
|
||||||
@ -206,7 +204,6 @@ func init() {
|
|||||||
utils.RPCEnabledFlag,
|
utils.RPCEnabledFlag,
|
||||||
rpcPortFlag,
|
rpcPortFlag,
|
||||||
signerSecretFlag,
|
signerSecretFlag,
|
||||||
dBFlag,
|
|
||||||
customDBFlag,
|
customDBFlag,
|
||||||
auditLogFlag,
|
auditLogFlag,
|
||||||
ruleFlag,
|
ruleFlag,
|
||||||
@ -365,13 +362,17 @@ func signer(c *cli.Context) error {
|
|||||||
log.Info("Using CLI as UI-channel")
|
log.Info("Using CLI as UI-channel")
|
||||||
ui = core.NewCommandlineUI()
|
ui = core.NewCommandlineUI()
|
||||||
}
|
}
|
||||||
fourByteDb := c.GlobalString(dBFlag.Name)
|
// 4bytedb data
|
||||||
fourByteLocal := c.GlobalString(customDBFlag.Name)
|
fourByteLocal := c.GlobalString(customDBFlag.Name)
|
||||||
db, err := core.NewAbiDBFromFiles(fourByteDb, fourByteLocal)
|
data, err := Asset("resources/4byte.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf(err.Error())
|
utils.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
log.Info("Loaded 4byte db", "signatures", db.Size(), "file", fourByteDb, "local", fourByteLocal)
|
db, err := core.NewAbiDBFromFiles(data, fourByteLocal)
|
||||||
|
if err != nil {
|
||||||
|
utils.Fatalf(err.Error())
|
||||||
|
}
|
||||||
|
log.Info("Loaded 4byte db", "signatures", db.Size(), "local", fourByteLocal)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
api core.ExternalAPI
|
api core.ExternalAPI
|
||||||
|
1
cmd/clef/resources/4byte.json
Normal file
1
cmd/clef/resources/4byte.json
Normal file
File diff suppressed because one or more lines are too long
@ -18,6 +18,7 @@ package core
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -183,17 +184,13 @@ func NewAbiDBFromFile(path string) (*AbiDb, error) {
|
|||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAbiDBFromFiles loads both the standard signature database and a custom database. The latter will be used
|
// NewAbiDBFromFiles loads both the standard signature database (resource file)and a custom database.
|
||||||
// to write new values into if they are submitted via the API
|
// The latter will be used to write new values into if they are submitted via the API
|
||||||
func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) {
|
func NewAbiDBFromFiles(raw []byte, custom string) (*AbiDb, error) {
|
||||||
|
|
||||||
db := &AbiDb{make(map[string]string), make(map[string]string), custom}
|
db := &AbiDb{make(map[string]string), make(map[string]string), custom}
|
||||||
db.customdbPath = custom
|
db.customdbPath = custom
|
||||||
|
|
||||||
raw, err := ioutil.ReadFile(standard)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := json.Unmarshal(raw, &db.db); err != nil {
|
if err := json.Unmarshal(raw, &db.db); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -207,7 +204,6 @@ func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +213,7 @@ func (db *AbiDb) LookupMethodSelector(id []byte) (string, error) {
|
|||||||
if len(id) < 4 {
|
if len(id) < 4 {
|
||||||
return "", fmt.Errorf("Expected 4-byte id, got %d", len(id))
|
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 {
|
if key, exists := db.db[sig]; exists {
|
||||||
return key, nil
|
return key, nil
|
||||||
}
|
}
|
||||||
@ -226,6 +222,7 @@ func (db *AbiDb) LookupMethodSelector(id []byte) (string, error) {
|
|||||||
}
|
}
|
||||||
return "", fmt.Errorf("Signature %v not found", sig)
|
return "", fmt.Errorf("Signature %v not found", sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *AbiDb) Size() int {
|
func (db *AbiDb) Size() int {
|
||||||
return len(db.db)
|
return len(db.db)
|
||||||
}
|
}
|
||||||
@ -255,6 +252,6 @@ func (db *AbiDb) AddSignature(selector string, data []byte) error {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
sig := common.ToHex(data[:4])
|
sig := hex.EncodeToString(data[:4])
|
||||||
return db.saveCustomAbi(selector, sig)
|
return db.saveCustomAbi(selector, sig)
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ func TestCustomABI(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
filename := fmt.Sprintf("%s/4byte_custom.json", d)
|
filename := fmt.Sprintf("%s/4byte_custom.json", d)
|
||||||
abidb, err := NewAbiDBFromFiles("../../cmd/clef/4byte.json", filename)
|
abidb, err := NewAbiDBFromFiles([]byte(""), filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ type Validator struct {
|
|||||||
func NewValidator(db *AbiDb) *Validator {
|
func NewValidator(db *AbiDb) *Validator {
|
||||||
return &Validator{db}
|
return &Validator{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSelector(selector string, data []byte) (*decodedCallData, error) {
|
func testSelector(selector string, data []byte) (*decodedCallData, error) {
|
||||||
if selector == "" {
|
if selector == "" {
|
||||||
return nil, fmt.Errorf("selector not found")
|
return nil, fmt.Errorf("selector not found")
|
||||||
|
Loading…
Reference in New Issue
Block a user