diff --git a/docs/content/api/openapi.yaml b/docs/content/api/openapi.yaml
index a0e2e30867..d343614ad6 100644
--- a/docs/content/api/openapi.yaml
+++ b/docs/content/api/openapi.yaml
@@ -857,6 +857,14 @@ paths:
explode: true
schema:
type: boolean
+ - name: count
+ description: return the number of names matching the search terms or other options
+ required: false
+ style: form
+ in: query
+ explode: true
+ schema:
+ type: boolean
- name: dryRun
description: only available with --clean or --autoname, outputs changes to stdout instead of updating databases
required: false
@@ -1010,6 +1018,14 @@ paths:
explode: true
schema:
type: boolean
+ - name: details
+ description: show the functions and events instead of summaries for all abi files
+ required: false
+ style: form
+ in: query
+ explode: true
+ schema:
+ type: boolean
- name: count
description: show the number of abis downloaded
required: false
diff --git a/docs/content/chifra/accounts.md b/docs/content/chifra/accounts.md
index 04cea87241..d1468475ed 100644
--- a/docs/content/chifra/accounts.md
+++ b/docs/content/chifra/accounts.md
@@ -223,7 +223,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
@@ -282,6 +282,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
-x, --fmt string export format, one of [none|json*|txt|csv]
@@ -342,7 +343,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/sdk b/sdk
index 838047ea0b..0f9b628c89 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit 838047ea0bda7ddfe1db98fd4dd7ad14c2b6d118
+Subproject commit 0f9b628c8954a0de5fe160afd0751d58ef41c5ec
diff --git a/src/apps/chifra/cmd/abis.go b/src/apps/chifra/cmd/abis.go
index da3a250af5..ec1f469109 100644
--- a/src/apps/chifra/cmd/abis.go
+++ b/src/apps/chifra/cmd/abis.go
@@ -59,7 +59,8 @@ func init() {
abisCmd.Flags().BoolVarP(&abisPkg.GetOptions().Known, "known", "k", false, `load common 'known' ABIs from cache`)
abisCmd.Flags().StringVarP(&abisPkg.GetOptions().ProxyFor, "proxy_for", "r", "", `redirects the query to this implementation`)
abisCmd.Flags().BoolVarP(&abisPkg.GetOptions().List, "list", "l", false, `a list of downloaded abi files`)
- abisCmd.Flags().BoolVarP(&abisPkg.GetOptions().Count, "count", "c", false, `show the number of abis downloaded`)
+ abisCmd.Flags().BoolVarP(&abisPkg.GetOptions().Details, "details", "d", false, `show the functions and events instead of summaries for all abi files`)
+ abisCmd.Flags().BoolVarP(&abisPkg.GetOptions().Count, "count", "U", false, `show the number of abis downloaded`)
abisCmd.Flags().StringSliceVarP(&abisPkg.GetOptions().Find, "find", "f", nil, `search for function or event declarations given a four- or 32-byte code(s)`)
abisCmd.Flags().StringSliceVarP(&abisPkg.GetOptions().Hint, "hint", "n", nil, `for the --find option only, provide hints to speed up the search`)
abisCmd.Flags().StringVarP(&abisPkg.GetOptions().Encode, "encode", "e", "", `generate the 32-byte encoding for a given canonical function or event signature`)
diff --git a/src/apps/chifra/cmd/monitors.go b/src/apps/chifra/cmd/monitors.go
index 1ba86336aa..0c967fa1ff 100644
--- a/src/apps/chifra/cmd/monitors.go
+++ b/src/apps/chifra/cmd/monitors.go
@@ -62,7 +62,7 @@ func init() {
monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().Remove, "remove", "", false, `remove a previously deleted monitor`)
monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().Clean, "clean", "C", false, `clean (i.e. remove duplicate appearances) from monitors, optionally clear stage`)
monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().List, "list", "l", false, `list monitors in the cache (--verbose for more detail)`)
- monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().Count, "count", "c", false, `show the number of active monitors (included deleted but not removed monitors)`)
+ monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().Count, "count", "U", false, `show the number of active monitors (included deleted but not removed monitors)`)
monitorsCmd.Flags().BoolVarP(&monitorsPkg.GetOptions().Staged, "staged", "S", false, `for --clean, --list, and --count options only, include staged monitors`)
globals.InitGlobals("monitors", monitorsCmd, &monitorsPkg.GetOptions().Globals, capabilities)
diff --git a/src/apps/chifra/cmd/names.go b/src/apps/chifra/cmd/names.go
index c385db8946..996e22cc86 100644
--- a/src/apps/chifra/cmd/names.go
+++ b/src/apps/chifra/cmd/names.go
@@ -65,6 +65,7 @@ func init() {
namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().Tags, "tags", "g", false, `export the list of tags and subtags only`)
namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().Clean, "clean", "C", false, `clean the data (addrs to lower case, sort by addr)`)
namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().Regular, "regular", "r", false, `only available with --clean, cleans regular names database`)
+ namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().Count, "count", "U", false, `return the number of names matching the search terms or other options`)
namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().DryRun, "dry_run", "d", false, `only available with --clean or --autoname, outputs changes to stdout instead of updating databases`)
namesCmd.Flags().StringVarP(&namesPkg.GetOptions().Autoname, "autoname", "A", "", `an address assumed to be a token, added automatically to names database if true`)
namesCmd.Flags().BoolVarP(&namesPkg.GetOptions().Create, "create", "", false, `create a new name record (hidden)`)
diff --git a/src/apps/chifra/internal/abis/README.md b/src/apps/chifra/internal/abis/README.md
index 16a62778a0..87ab0268dd 100644
--- a/src/apps/chifra/internal/abis/README.md
+++ b/src/apps/chifra/internal/abis/README.md
@@ -37,7 +37,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/src/apps/chifra/internal/abis/handle_details.go b/src/apps/chifra/internal/abis/handle_details.go
new file mode 100644
index 0000000000..3a9b76f370
--- /dev/null
+++ b/src/apps/chifra/internal/abis/handle_details.go
@@ -0,0 +1,55 @@
+package abisPkg
+
+import (
+ "errors"
+ "fmt"
+ "path/filepath"
+ "strings"
+
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/rpc"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types"
+)
+
+func (opts *AbisOptions) HandleDetails(rCtx *output.RenderCtx) (err error) {
+ if len(opts.Addrs) == 0 {
+ vFunc := func(fn string, vP any) (bool, error) {
+ _ = vP
+ _, name := filepath.Split(fn)
+ if strings.HasSuffix(name, ".json") {
+ if base.IsValidAddress(strings.TrimSuffix(name, ".json")) {
+ // silent ignore
+ opts.Addrs = append(opts.Addrs, strings.TrimSuffix(name, ".json"))
+ }
+ }
+ return true, nil
+ }
+ opts.ForEveryAbi(true, vFunc, nil)
+ }
+
+ fetchData := func(modelChan chan types.Modeler, errorChan chan error) {
+ for _, addr := range opts.Addrs {
+ functions, which, err := opts.LoadAbis([]string{addr}, false /* known */)
+ if err != nil {
+ if errors.Is(err, rpc.ErrNotAContract) {
+ msg := fmt.Errorf("address %s is not a smart contract", which)
+ errorChan <- msg
+ // Report but don't quit processing
+ } else {
+ // Cancel on all other errors
+ errorChan <- err
+ rCtx.Cancel()
+ // } else if len(opts.ProxyFor) > 0 {
+ // TODO: We need to copy the proxied-to ABI to the proxy (replacing)
+ }
+ }
+
+ for _, f := range functions {
+ modelChan <- f
+ }
+ }
+ }
+
+ return output.StreamMany(rCtx, fetchData, opts.Globals.OutputOpts())
+}
diff --git a/src/apps/chifra/internal/abis/handle_list.go b/src/apps/chifra/internal/abis/handle_list.go
index 6837e4dbb1..e6ebb6acc4 100644
--- a/src/apps/chifra/internal/abis/handle_list.go
+++ b/src/apps/chifra/internal/abis/handle_list.go
@@ -25,12 +25,17 @@ func (opts *AbisOptions) HandleList(rCtx *output.RenderCtx) error {
abiArray := make([]types.Abi, 0, 100)
vFunc := func(fn string, vP any) (bool, error) {
_ = vP
+ isKnown := strings.Contains(fn, "known")
+ if opts.Known && !isKnown {
+ return true, nil
+ }
+
if strings.HasSuffix(fn, ".json") {
info, _ := os.Stat(fn)
abi := types.Abi{
FileSize: file.FileSize(fn),
LastModDate: info.ModTime().Format("2006-01-02 15:04:05"),
- IsKnown: strings.Contains(fn, "known"),
+ IsKnown: isKnown,
}
abi.Path, abi.Name = filepath.Split(fn)
if len(abi.Name) > 0 {
diff --git a/src/apps/chifra/internal/abis/options.go b/src/apps/chifra/internal/abis/options.go
index 95557ea128..c1be202f81 100644
--- a/src/apps/chifra/internal/abis/options.go
+++ b/src/apps/chifra/internal/abis/options.go
@@ -32,6 +32,7 @@ type AbisOptions struct {
Known bool `json:"known,omitempty"` // Load common 'known' ABIs from cache
ProxyFor string `json:"proxyFor,omitempty"` // Redirects the query to this implementation
List bool `json:"list,omitempty"` // A list of downloaded abi files
+ Details bool `json:"details,omitempty"` // Show the functions and events instead of summaries for all abi files
Count bool `json:"count,omitempty"` // Show the number of abis downloaded
Find []string `json:"find,omitempty"` // Search for function or event declarations given a four- or 32-byte code(s)
Hint []string `json:"hint,omitempty"` // For the --find option only, provide hints to speed up the search
@@ -52,6 +53,7 @@ func (opts *AbisOptions) testLog() {
logger.TestLog(opts.Known, "Known: ", opts.Known)
logger.TestLog(len(opts.ProxyFor) > 0, "ProxyFor: ", opts.ProxyFor)
logger.TestLog(opts.List, "List: ", opts.List)
+ logger.TestLog(opts.Details, "Details: ", opts.Details)
logger.TestLog(opts.Count, "Count: ", opts.Count)
logger.TestLog(len(opts.Find) > 0, "Find: ", opts.Find)
logger.TestLog(len(opts.Hint) > 0, "Hint: ", opts.Hint)
@@ -92,6 +94,8 @@ func AbisFinishParseInternal(w io.Writer, values url.Values) *AbisOptions {
opts.ProxyFor = value[0]
case "list":
opts.List = true
+ case "details":
+ opts.Details = true
case "count":
opts.Count = true
case "find":
diff --git a/src/apps/chifra/internal/abis/output.go b/src/apps/chifra/internal/abis/output.go
index b2ff9ebe07..a938d97b75 100644
--- a/src/apps/chifra/internal/abis/output.go
+++ b/src/apps/chifra/internal/abis/output.go
@@ -61,6 +61,8 @@ func (opts *AbisOptions) AbisInternal(rCtx *output.RenderCtx) error {
err = opts.HandleFind(rCtx)
} else if opts.Count {
err = opts.HandleCount(rCtx)
+ } else if opts.Details {
+ err = opts.HandleDetails(rCtx)
} else if opts.List {
err = opts.HandleList(rCtx)
} else if len(opts.Encode) > 0 {
diff --git a/src/apps/chifra/internal/abis/validate.go b/src/apps/chifra/internal/abis/validate.go
index 1005dd4de9..6650bf039a 100644
--- a/src/apps/chifra/internal/abis/validate.go
+++ b/src/apps/chifra/internal/abis/validate.go
@@ -43,6 +43,7 @@ func (opts *AbisOptions) validateAbis() error {
len(opts.Find) == 0 &&
!opts.Count &&
!opts.List &&
+ !opts.Details &&
!opts.Known &&
!opts.Globals.Decache {
// If we're not find and not known we better have at least one address
diff --git a/src/apps/chifra/internal/monitors/README.md b/src/apps/chifra/internal/monitors/README.md
index 65db74804f..93e08cface 100644
--- a/src/apps/chifra/internal/monitors/README.md
+++ b/src/apps/chifra/internal/monitors/README.md
@@ -33,7 +33,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/src/apps/chifra/internal/names/README.md b/src/apps/chifra/internal/names/README.md
index 559205b0cb..457b4670c6 100644
--- a/src/apps/chifra/internal/names/README.md
+++ b/src/apps/chifra/internal/names/README.md
@@ -34,6 +34,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/src/apps/chifra/internal/names/crud.go b/src/apps/chifra/internal/names/crud.go
index 8cbfbd4eaf..1bf99e3da9 100644
--- a/src/apps/chifra/internal/names/crud.go
+++ b/src/apps/chifra/internal/names/crud.go
@@ -11,6 +11,7 @@ package namesPkg
import (
"net/http"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/crud"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types"
)
@@ -30,6 +31,10 @@ func (opts *NamesOptions) getType() types.Parts {
ret |= types.Regular
}
+ if opts.All && !base.IsTestMode() {
+ ret |= types.Baddress
+ }
+
if opts.MatchCase {
ret |= types.MatchCase
}
diff --git a/src/apps/chifra/internal/names/handle_count.go b/src/apps/chifra/internal/names/handle_count.go
new file mode 100644
index 0000000000..ec0b535abe
--- /dev/null
+++ b/src/apps/chifra/internal/names/handle_count.go
@@ -0,0 +1,61 @@
+// Copyright 2021 The TrueBlocks Authors. All rights reserved.
+// Use of this source code is governed by a license that can
+// be found in the LICENSE file.
+
+package namesPkg
+
+import (
+ "path/filepath"
+
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/config"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/file"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/names"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output"
+ "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types"
+)
+
+// HandleCount handles the chifra abis --count command.
+func (opts *NamesOptions) HandleCount(rCtx *output.RenderCtx) error {
+ testMode := opts.Globals.TestMode
+ chain := opts.Globals.Chain
+
+ fetchData := func(modelChan chan types.Modeler, errorChan chan error) {
+ s := types.Count{}
+ if testMode {
+ s.Count = 199
+ } else {
+ configPath := config.MustGetPathToChainConfig(chain)
+ t := opts.getType()
+ if t&types.Custom != 0 {
+ if n, err := file.WordCount(filepath.Join(configPath, "names_custom.tab"), true); err != nil {
+ errorChan <- err
+ return
+ } else {
+ s.Count += uint64(n)
+ }
+ }
+ if t&types.Prefund != 0 {
+ if n, err := file.WordCount(filepath.Join(configPath, "allocs.csv"), true); err != nil {
+ errorChan <- err
+ return
+ } else {
+ s.Count += uint64(n)
+ }
+ }
+ if t&types.Regular != 0 {
+ if n, err := file.WordCount(filepath.Join(configPath, "names.tab"), true); err != nil {
+ errorChan <- err
+ return
+ } else {
+ s.Count += uint64(n)
+ }
+ }
+ if t&types.Baddress != 0 {
+ s.Count += uint64(names.BaddressCount())
+ }
+ }
+ modelChan <- &s
+ }
+
+ return output.StreamMany(rCtx, fetchData, opts.Globals.OutputOpts())
+}
diff --git a/src/apps/chifra/internal/names/options.go b/src/apps/chifra/internal/names/options.go
index 401ceef4a2..648cb27e7a 100644
--- a/src/apps/chifra/internal/names/options.go
+++ b/src/apps/chifra/internal/names/options.go
@@ -39,6 +39,7 @@ type NamesOptions struct {
Tags bool `json:"tags,omitempty"` // Export the list of tags and subtags only
Clean bool `json:"clean,omitempty"` // Clean the data (addrs to lower case, sort by addr)
Regular bool `json:"regular,omitempty"` // Only available with --clean, cleans regular names database
+ Count bool `json:"count,omitempty"` // Return the number of names matching the search terms or other options
DryRun bool `json:"dryRun,omitempty"` // Only available with --clean or --autoname, outputs changes to stdout instead of updating databases
Autoname string `json:"autoname,omitempty"` // An address assumed to be a token, added automatically to names database if true
Create bool `json:"create,omitempty"` // Create a new name record
@@ -70,6 +71,7 @@ func (opts *NamesOptions) testLog() {
logger.TestLog(opts.Tags, "Tags: ", opts.Tags)
logger.TestLog(opts.Clean, "Clean: ", opts.Clean)
logger.TestLog(opts.Regular, "Regular: ", opts.Regular)
+ logger.TestLog(opts.Count, "Count: ", opts.Count)
logger.TestLog(opts.DryRun, "DryRun: ", opts.DryRun)
logger.TestLog(len(opts.Autoname) > 0, "Autoname: ", opts.Autoname)
logger.TestLog(opts.Create, "Create: ", opts.Create)
@@ -125,6 +127,8 @@ func NamesFinishParseInternal(w io.Writer, values url.Values) *NamesOptions {
opts.Clean = true
case "regular":
opts.Regular = true
+ case "count":
+ opts.Count = true
case "dryRun":
opts.DryRun = true
case "autoname":
diff --git a/src/apps/chifra/internal/names/output.go b/src/apps/chifra/internal/names/output.go
index beff867c57..5f991747b6 100644
--- a/src/apps/chifra/internal/names/output.go
+++ b/src/apps/chifra/internal/names/output.go
@@ -63,7 +63,9 @@ func (opts *NamesOptions) NamesInternal(rCtx *output.RenderCtx) error {
msg := "chifra names"
// EXISTING_CODE
// EXISTING_CODE
- if len(opts.Autoname) > 0 {
+ if opts.Count {
+ err = opts.HandleCount(rCtx)
+ } else if len(opts.Autoname) > 0 {
err = opts.HandleAutoname(rCtx)
} else if opts.Clean {
err = opts.HandleClean(rCtx)
diff --git a/src/apps/chifra/internal/names/validate.go b/src/apps/chifra/internal/names/validate.go
index 6c7ee129e9..d37f37cb95 100644
--- a/src/apps/chifra/internal/names/validate.go
+++ b/src/apps/chifra/internal/names/validate.go
@@ -24,6 +24,21 @@ func (opts *NamesOptions) validateNames() error {
return validate.Usage("chain {0} is not properly configured.", chain)
}
+ if opts.Count {
+ if opts.Clean || len(opts.Autoname) > 0 || opts.anyCrud() {
+ return validate.Usage("You may not use the {0} option when editing names.", "--count")
+ }
+ if len(opts.Terms) > 0 {
+ return validate.Usage("The {0} option is not available{1}.", "--count", " with search terms")
+ }
+ /*
+ Custom bool `json:"custom,omitempty"` // Include only custom named accounts in the search
+ Prefund bool `json:"prefund,omitempty"` // Include prefund accounts in the search
+ Regular bool `json:"regular,omitempty"` // Only available with --clean, cleans regular names database
+ Tags bool `json:"tags,omitempty"` // Export the list of tags and subtags only
+ */
+ }
+
if len(opts.Terms) != 1 {
if opts.Delete {
return validate.Usage("The {0} option requires exactly one address.", "--delete")
diff --git a/src/apps/chifra/pkg/file/wc.go b/src/apps/chifra/pkg/file/wc.go
index 5f02379cd5..486a777448 100644
--- a/src/apps/chifra/pkg/file/wc.go
+++ b/src/apps/chifra/pkg/file/wc.go
@@ -11,6 +11,10 @@ func WordCount(fileName string, ignoreHeader bool) (int, error) {
// fmt.Println("-------------------------------------------")
// fmt.Println(fileName, FileExists(fileName))
// fmt.Println("-------------------------------------------")
+ if !FileExists(fileName) {
+ return 0, os.ErrNotExist
+ }
+
r, _ := os.OpenFile(fileName, os.O_RDONLY, 0)
defer r.Close()
diff --git a/src/apps/chifra/pkg/names/regular.go b/src/apps/chifra/pkg/names/regular.go
index 27a13a5f43..0084f06051 100644
--- a/src/apps/chifra/pkg/names/regular.go
+++ b/src/apps/chifra/pkg/names/regular.go
@@ -15,6 +15,12 @@ var regularNamesMutex sync.Mutex
// loadRegularMap loads the regular names from the cache
func loadRegularMap(chain string, terms []string, parts types.Parts, ret *map[base.Address]types.Name) error {
+ regularNamesMutex.Lock()
+ defer func() {
+ regularNamesLoaded = true
+ regularNamesMutex.Unlock()
+ }()
+
if regularNamesLoaded {
for _, name := range regularNames {
if doSearch(&name, terms, parts) {
@@ -28,12 +34,6 @@ func loadRegularMap(chain string, terms []string, parts types.Parts, ret *map[ba
return nil
}
- regularNamesMutex.Lock()
- defer func() {
- regularNamesLoaded = true
- regularNamesMutex.Unlock()
- }()
-
db, err := openDatabaseForRead(chain, DatabaseRegular)
if err != nil {
return err
@@ -99,3 +99,9 @@ func loadKnownBadresses(unused string, terms []string, parts types.Parts, ret *m
}
return nil
}
+
+func BaddressCount() int {
+ m := make(map[base.Address]types.Name)
+ _ = loadKnownBadresses("unused", []string{}, types.Baddress, &m)
+ return len(m)
+}
diff --git a/src/apps/chifra/pkg/types/sort.go b/src/apps/chifra/pkg/types/sort.go
index 1e40ddc2be..a3468bd698 100644
--- a/src/apps/chifra/pkg/types/sort.go
+++ b/src/apps/chifra/pkg/types/sort.go
@@ -6,3 +6,10 @@ const (
Ascending SortOrder = true
Descending SortOrder = false
)
+
+func (o SortOrder) String() string {
+ if o == Ascending {
+ return "ascending"
+ }
+ return "descending"
+}
diff --git a/src/apps/chifra/pkg/types/types_abi_sort.go b/src/apps/chifra/pkg/types/types_abi_sort.go
index 85e5faf997..1f92c04ad9 100644
--- a/src/apps/chifra/pkg/types/types_abi_sort.go
+++ b/src/apps/chifra/pkg/types/types_abi_sort.go
@@ -16,13 +16,9 @@ const (
AbiName AbiField = "name"
)
-// IsValidAbiField returns true if the given field is a valid sortable Abi field.
-func IsValidAbiField(field string) bool {
- switch field {
- case "address", "fileSize", "hasConstructor", "hasFallback", "isEmpty", "isKnown", "lastModDate", "nEvents", "nFunctions", "name":
- return true
- }
- return false
+// GetSortFieldsAbi returns a []string of valid sort fields for the type.
+func GetSortFieldsAbi() []string {
+ return []string{"address", "fileSize", "hasConstructor", "hasFallback", "isEmpty", "isKnown", "lastModDate", "nEvents", "nFunctions", "name"}
}
// AbiBy returns a comparison function for sorting Abi instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_cacheitem_sort.go b/src/apps/chifra/pkg/types/types_cacheitem_sort.go
index c7284d67ef..dd9e551d77 100644
--- a/src/apps/chifra/pkg/types/types_cacheitem_sort.go
+++ b/src/apps/chifra/pkg/types/types_cacheitem_sort.go
@@ -12,13 +12,9 @@ const (
CacheItemType CacheItemField = "type"
)
-// IsValidCacheItemField returns true if the given field is a valid sortable CacheItem field.
-func IsValidCacheItemField(field string) bool {
- switch field {
- case "lastCached", "nFiles", "nFolders", "path", "sizeInBytes", "type":
- return true
- }
- return false
+// GetSortFieldsCacheItem returns a []string of valid sort fields for the type.
+func GetSortFieldsCacheItem() []string {
+ return []string{"lastCached", "nFiles", "nFolders", "path", "sizeInBytes", "type"}
}
// CacheItemBy returns a comparison function for sorting CacheItem instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_chain_sort.go b/src/apps/chifra/pkg/types/types_chain_sort.go
index 6f8aa541e7..1aca58ae00 100644
--- a/src/apps/chifra/pkg/types/types_chain_sort.go
+++ b/src/apps/chifra/pkg/types/types_chain_sort.go
@@ -13,13 +13,9 @@ const (
ChainSymbol ChainField = "symbol"
)
-// IsValidChainField returns true if the given field is a valid sortable Chain field.
-func IsValidChainField(field string) bool {
- switch field {
- case "chain", "chainId", "ipfsGateway", "localExplorer", "remoteExplorer", "rpcProvider", "symbol":
- return true
- }
- return false
+// GetSortFieldsChain returns a []string of valid sort fields for the type.
+func GetSortFieldsChain() []string {
+ return []string{"chain", "chainId", "ipfsGateway", "localExplorer", "remoteExplorer", "rpcProvider", "symbol"}
}
// ChainBy returns a comparison function for sorting Chain instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_chunkrecord_sort.go b/src/apps/chifra/pkg/types/types_chunkrecord_sort.go
index 2bb3dcc0c6..5f3cb061d2 100644
--- a/src/apps/chifra/pkg/types/types_chunkrecord_sort.go
+++ b/src/apps/chifra/pkg/types/types_chunkrecord_sort.go
@@ -10,13 +10,9 @@ const (
ChunkRecordRangeDates ChunkRecordField = "rangeDates"
)
-// IsValidChunkRecordField returns true if the given field is a valid sortable ChunkRecord field.
-func IsValidChunkRecordField(field string) bool {
- switch field {
- case "bloomSize", "indexSize", "range", "rangeDates":
- return true
- }
- return false
+// GetSortFieldsChunkRecord returns a []string of valid sort fields for the type.
+func GetSortFieldsChunkRecord() []string {
+ return []string{"bloomSize", "indexSize", "range", "rangeDates"}
}
// ChunkRecordBy returns a comparison function for sorting ChunkRecord instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_chunkstats_sort.go b/src/apps/chifra/pkg/types/types_chunkstats_sort.go
index 5315b79b50..958845a85d 100644
--- a/src/apps/chifra/pkg/types/types_chunkstats_sort.go
+++ b/src/apps/chifra/pkg/types/types_chunkstats_sort.go
@@ -18,13 +18,9 @@ const (
ChunkStatsRatio ChunkStatsField = "ratio"
)
-// IsValidChunkStatsField returns true if the given field is a valid sortable ChunkStats field.
-func IsValidChunkStatsField(field string) bool {
- switch field {
- case "addrsPerBlock", "appsPerAddr", "appsPerBlock", "bloomSz", "chunkSz", "nAddrs", "nApps", "nBlocks", "nBlooms", "range", "rangeDates", "ratio":
- return true
- }
- return false
+// GetSortFieldsChunkStats returns a []string of valid sort fields for the type.
+func GetSortFieldsChunkStats() []string {
+ return []string{"addrsPerBlock", "appsPerAddr", "appsPerBlock", "bloomSz", "chunkSz", "nAddrs", "nApps", "nBlocks", "nBlooms", "range", "rangeDates", "ratio"}
}
// ChunkStatsBy returns a comparison function for sorting ChunkStats instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_function_sort.go b/src/apps/chifra/pkg/types/types_function_sort.go
index fdb15b1355..51083e198c 100644
--- a/src/apps/chifra/pkg/types/types_function_sort.go
+++ b/src/apps/chifra/pkg/types/types_function_sort.go
@@ -11,13 +11,9 @@ const (
FunctionType FunctionField = "type"
)
-// IsValidFunctionField returns true if the given field is a valid sortable Function field.
-func IsValidFunctionField(field string) bool {
- switch field {
- case "encoding", "name", "signature", "stateMutability", "type":
- return true
- }
- return false
+// GetSortFieldsFunction returns a []string of valid sort fields for the type.
+func GetSortFieldsFunction() []string {
+ return []string{"encoding", "name", "signature", "stateMutability", "type"}
}
// FunctionBy returns a comparison function for sorting Function instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_monitor_sort.go b/src/apps/chifra/pkg/types/types_monitor_sort.go
index 2cbd60a6c7..fcfe318629 100644
--- a/src/apps/chifra/pkg/types/types_monitor_sort.go
+++ b/src/apps/chifra/pkg/types/types_monitor_sort.go
@@ -13,13 +13,9 @@ const (
MonitorNRecords MonitorField = "nRecords"
)
-// IsValidMonitorField returns true if the given field is a valid sortable Monitor field.
-func IsValidMonitorField(field string) bool {
- switch field {
- case "address", "deleted", "fileSize", "isEmpty", "isStaged", "lastScanned", "nRecords":
- return true
- }
- return false
+// GetSortFieldsMonitor returns a []string of valid sort fields for the type.
+func GetSortFieldsMonitor() []string {
+ return []string{"address", "deleted", "fileSize", "isEmpty", "isStaged", "lastScanned", "nRecords"}
}
// MonitorBy returns a comparison function for sorting Monitor instances by the given field.
diff --git a/src/apps/chifra/pkg/types/types_name_sort.go b/src/apps/chifra/pkg/types/types_name_sort.go
index 7716dfcd9f..fef76ce069 100644
--- a/src/apps/chifra/pkg/types/types_name_sort.go
+++ b/src/apps/chifra/pkg/types/types_name_sort.go
@@ -18,13 +18,9 @@ const (
NameTags NameField = "tags"
)
-// IsValidNameField returns true if the given field is a valid sortable Name field.
-func IsValidNameField(field string) bool {
- switch field {
- case "address", "decimals", "deleted", "isContract", "isCustom", "isErc20", "isErc721", "isPrefund", "name", "source", "symbol", "tags":
- return true
- }
- return false
+// GetSortFieldsName returns a []string of valid sort fields for the type.
+func GetSortFieldsName() []string {
+ return []string{"address", "decimals", "deleted", "isContract", "isCustom", "isErc20", "isErc721", "isPrefund", "name", "source", "symbol", "tags"}
}
// NameBy returns a comparison function for sorting Name instances by the given field.
diff --git a/src/dev_tools/goMaker/templates/cmd-line-options.csv b/src/dev_tools/goMaker/templates/cmd-line-options.csv
index ac48bbaac2..94cdf81b2d 100644
--- a/src/dev_tools/goMaker/templates/cmd-line-options.csv
+++ b/src/dev_tools/goMaker/templates/cmd-line-options.csv
@@ -18,13 +18,13 @@ num,folder,group,route,tool,longName,hotKey,def_val,attributes,handler,option_ty
12150,apps,Accounts,list,acctExport,n2,,,,,note,,,,,,No other options are permitted when --silent is selected.
#
13000,apps,Accounts,export,acctExport,,,,visible|docs,,command,,,Export details,[flags]
[address...] [topics...] [fourbytes...],default|caching|ether|names|,Export full details of transactions for one or more addresses.
-13020,apps,Accounts,export,acctExport,addrs,,,required|visible|docs,13,positional,list,transaction,,,,one or more addresses (0x...) to export
+13020,apps,Accounts,export,acctExport,addrs,,,required|visible|docs,12,positional,list,transaction,,,,one or more addresses (0x...) to export
13030,apps,Accounts,export,acctExport,topics,,,visible|docs,,positional,list,,,,,filter by one or more log topics (only for --logs option)
13040,apps,Accounts,export,acctExport,fourbytes,,,visible|docs,,positional,list,,,,,filter by one or more fourbytes (only for transactions and trace options)
13050,apps,Accounts,export,acctExport,appearances,p,,visible|docs,5,switch,,appearance,,,,export a list of appearances
13060,apps,Accounts,export,acctExport,receipts,r,,visible|docs,2,switch,,receipt,,,,export receipts instead of transactional data
13070,apps,Accounts,export,acctExport,logs,l,,visible|docs,3,switch,,log,,,,export logs instead of transactional data
-13080,apps,Accounts,export,acctExport,traces,t,,visible|docs,12,switch,,trace,,,,export traces instead of transactional data
+13080,apps,Accounts,export,acctExport,traces,t,,visible|docs,11,switch,,trace,,,,export traces instead of transactional data
13090,apps,Accounts,export,acctExport,neighbors,n,,visible|docs,8,switch,,message,,,,export the neighbors of the given address
13110,apps,Accounts,export,acctExport,statements,A,,visible|docs,9,switch,,statement,,,,export only statements
13110,apps,Accounts,export,acctExport,transfers,X,,visible|docs,10,switch,,transfer,,,,export only eth or token transfers
@@ -64,30 +64,31 @@ num,folder,group,route,tool,longName,hotKey,def_val,attributes,handler,option_ty
13430,apps,Accounts,export,acctExport,n12,,,,,note,,,,,,The --traces option requires your RPC to provide trace data. See the README for more information.
#
14000,apps,Accounts,monitors,acctExport,,,,visible|docs,,command,,,Manage monitors,[flags] [address...],default|caching|names|,Add, remove, clean, and list address monitors.
-14020,apps,Accounts,monitors,acctExport,addrs,,,visible|docs,5,positional,list,message,,,,one or more addresses (0x...) to process
+14020,apps,Accounts,monitors,acctExport,addrs,,,visible|docs,4,positional,list,message,,,,one or more addresses (0x...) to process
14030,apps,Accounts,monitors,acctExport,delete,,,visible|docs|crud,,switch,,,,,,delete a monitor, but do not remove it
14040,apps,Accounts,monitors,acctExport,undelete,,,visible|docs|crud,,switch,,,,,,undelete a previously deleted monitor
14050,apps,Accounts,monitors,acctExport,remove,,,visible|docs|crud,,switch,,,,,,remove a previously deleted monitor
14060,apps,Accounts,monitors,acctExport,clean,C,,visible|docs,2,switch,,monitorClean,,,,clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
14070,apps,Accounts,monitors,acctExport,list,l,,visible|docs,3,switch,,monitor,,,,list monitors in the cache (--verbose for more detail)
-14075,apps,Accounts,monitors,acctExport,count,c,,visible|docs,1,switch,,count,,,,show the number of active monitors (included deleted but not removed monitors)
+14075,apps,Accounts,monitors,acctExport,count,U,,visible|docs,1,switch,,count,,,,show the number of active monitors (included deleted but not removed monitors)
14065,apps,Accounts,monitors,acctExport,staged,S,,visible|docs,,switch,,,,,,for --clean, --list, and --count options only, include staged monitors
14140,apps,Accounts,monitors,acctExport,n1,,,,,note,,,,,,An `address` must be either an ENS name or start with '0x' and be forty-two characters long.
14150,apps,Accounts,monitors,acctExport,n2,,,,,note,,,,,,If no address is presented to the --clean command, all existing monitors will be cleaned.
#
15000,tools,Accounts,names,ethNames,,,,visible|docs,,command,,,Manage names,[flags] [term...],default|,Query addresses or names of well-known accounts.
-15020,tools,Accounts,names,ethNames,terms,,,required|visible|docs,4,positional,list,name,,,,a space separated list of one or more search terms
+15020,tools,Accounts,names,ethNames,terms,,,required|visible|docs,5,positional,list,name,,,,a space separated list of one or more search terms
15030,tools,Accounts,names,ethNames,expand,e,,visible|docs,,switch,,,,,,expand search to include all fields (search name, address, and symbol otherwise)
15040,tools,Accounts,names,ethNames,match_case,m,,visible|docs,,switch,,,,,,do case-sensitive search
15050,tools,Accounts,names,ethNames,all,a,,visible|docs,,switch,,,,,,include all (including custom) names in the search
15060,tools,Accounts,names,ethNames,custom,c,,visible|docs,,switch,,,,,,include only custom named accounts in the search
15070,tools,Accounts,names,ethNames,prefund,p,,visible|docs,,switch,,,,,,include prefund accounts in the search
15080,tools,Accounts,names,ethNames,addr,s,,visible|docs,,switch,,name,,,,display only addresses in the results (useful for scripting, assumes --no_header)
-15090,tools,Accounts,names,ethNames,tags,g,,visible|docs,3,switch,,name,,,,export the list of tags and subtags only
-15100,tools,Accounts,names,ethNames,clean,C,,visible|docs,2,switch,,message,,,,clean the data (addrs to lower case, sort by addr)
+15090,tools,Accounts,names,ethNames,tags,g,,visible|docs,4,switch,,name,,,,export the list of tags and subtags only
+15100,tools,Accounts,names,ethNames,clean,C,,visible|docs,3,switch,,message,,,,clean the data (addrs to lower case, sort by addr)
15110,tools,Accounts,names,ethNames,regular,r,,visible|docs,,switch,,,,,,only available with --clean, cleans regular names database
+15115,tools,Accounts,names,ethNames,count,U,,visible|docs,1,switch,,count,,,,return the number of names matching the search terms or other options
15120,tools,Accounts,names,ethNames,dry_run,d,,visible|docs,,switch,,,,,,only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-15130,tools,Accounts,names,ethNames,autoname,A,,visible|docs,1,flag,,message,,,,an address assumed to be a token, added automatically to names database if true
+15130,tools,Accounts,names,ethNames,autoname,A,,visible|docs,2,flag,,message,,,,an address assumed to be a token, added automatically to names database if true
15140,tools,Accounts,names,ethNames,create,,,docs|crud,,switch,,name,,,,create a new name record
15150,tools,Accounts,names,ethNames,update,,,docs|crud,,switch,,name,,,,edit an existing name
15160,tools,Accounts,names,ethNames,delete,,,docs|crud,,switch,,name,,,,delete a name, but do not remove it
@@ -97,14 +98,15 @@ num,folder,group,route,tool,longName,hotKey,def_val,attributes,handler,option_ty
15200,tools,Accounts,names,ethNames,n2,,,,,note,,,,,,The `--match_case` option enables case sensitive matching.
#
16000,tools,Accounts,abis,grabABI,,,,visible|docs,,command,,,Manage Abi files,[flags] [address...],default|caching|names|,Fetches the ABI for a smart contract.
-16020,tools,Accounts,abis,grabABI,addrs,,,required|visible|docs,5,positional,list,function,,,,a list of one or more smart contracts whose ABIs to display
+16020,tools,Accounts,abis,grabABI,addrs,,,required|visible|docs,6,positional,list,function,,,,a list of one or more smart contracts whose ABIs to display
16030,tools,Accounts,abis,grabABI,known,k,,visible|docs,,switch,,,,,,load common 'known' ABIs from cache
16040,tools,Accounts,abis,grabABI,proxy_for,r,,visible|docs,,flag,,,,,,redirects the query to this implementation
-16050,tools,Accounts,abis,grabABI,list,l,,visible|docs,3,switch,,abi,,,,a list of downloaded abi files
-16060,tools,Accounts,abis,grabABI,count,c,,visible|docs,2,switch,,count,,,,show the number of abis downloaded
+16050,tools,Accounts,abis,grabABI,list,l,,visible|docs,4,switch,,abi,,,,a list of downloaded abi files
+16055,tools,Accounts,abis,grabABI,details,d,,visible|docs,3,switch,,function,,,,show the functions and events instead of summaries for all abi files
+16060,tools,Accounts,abis,grabABI,count,U,,visible|docs,2,switch,,count,,,,show the number of abis downloaded
16070,tools,Accounts,abis,grabABI,find,f,,visible|docs,1,flag,list,function,,,,search for function or event declarations given a four- or 32-byte code(s)
16080,tools,Accounts,abis,grabABI,hint,n,,visible|docs,,flag,list,,,,,for the --find option only, provide hints to speed up the search
-16090,tools,Accounts,abis,grabABI,encode,e,,visible|docs,4,flag,,function,,,,generate the 32-byte encoding for a given canonical function or event signature
+16090,tools,Accounts,abis,grabABI,encode,e,,visible|docs,5,flag,,function,,,,generate the 32-byte encoding for a given canonical function or event signature
16100,tools,Accounts,abis,grabABI,n1,,,,,note,,,,,,Search for either four byte signatures or event signatures with the --find option.
#
21000,,Chain Data,,,,,,,,group,,,,,,Access and cache blockchain-related data
@@ -135,10 +137,10 @@ num,folder,group,route,tool,longName,hotKey,def_val,attributes,handler,option_ty
22280,tools,Chain Data,blocks,getBlocks,n10,,,,,note,,,,,,The --traces option requires your RPC to provide trace data. See the README for more information.
#
23000,tools,Chain Data,transactions,getTrans,,,,visible|docs,,command,,,Get transactions,[flags] [tx_id...],default|caching|ether|names|,Retrieve one or more transactions from the chain or local cache.
-23020,tools,Chain Data,transactions,getTrans,transactions,,,required|visible|docs,4,positional,list,transaction,,,,a space-separated list of one or more transaction identifiers
+23020,tools,Chain Data,transactions,getTrans,transactions,,,required|visible|docs,3,positional,list,transaction,,,,a space-separated list of one or more transaction identifiers
23030,tools,Chain Data,transactions,getTrans,articulate,a,,visible|docs,,switch,,,,,,articulate the retrieved data if ABIs can be found
23040,tools,Chain Data,transactions,getTrans,traces,t,,visible|docs,,switch,,trace,,,,include the transaction's traces in the results
-23050,tools,Chain Data,transactions,getTrans,uniq,u,,visible|docs,3,switch,,appearance,,,,display a list of uniq addresses found in the transaction
+23050,tools,Chain Data,transactions,getTrans,uniq,u,,visible|docs,2,switch,,appearance,,,,display a list of uniq addresses found in the transaction
23060,tools,Chain Data,transactions,getTrans,flow,f,,visible|docs,,flag,enum[from|to],,,,,for the uniq option only, export only from or to (including trace from or to)
23070,tools,Chain Data,transactions,getTrans,logs,l,,visible|docs,1,switch,,log,,,,display only the logs found in the transaction(s)
23080,tools,Chain Data,transactions,getTrans,emitter,m,,visible|docs,,flag,list,,,,,for the --logs option only, filter logs to show only those logs emitted by the given address(es)
diff --git a/src/dev_tools/goMaker/templates/generators/codebase/sdk_sorts.go.tmpl b/src/dev_tools/goMaker/templates/generators/codebase/sdk_sorts.go.tmpl
index bd493e6762..0871bf3345 100644
--- a/src/dev_tools/goMaker/templates/generators/codebase/sdk_sorts.go.tmpl
+++ b/src/dev_tools/goMaker/templates/generators/codebase/sdk_sorts.go.tmpl
@@ -15,6 +15,22 @@ type SortSpec struct {
Order []SortOrder `json:"orders"`
}
+// String returns a string representation of the SortSpec.
+func (s SortSpec) String() string {
+ if len(s.Fields) == 0 {
+ return "empty sort specification"
+ }
+
+ result := "sort by "
+ for i, field := range s.Fields {
+ if i > 0 {
+ result += ", "
+ }
+ result += field + " (" + s.Order[i].String() + ")"
+ }
+ return result
+}
+
{{range .Structures}}
{{ if .HasSorts }}{{.Sorts2}}{{end}}
{{end}}
diff --git a/src/dev_tools/goMaker/templates/generators/types/src_apps_chifra_pkg_types_type+sort.go.tmpl b/src/dev_tools/goMaker/templates/generators/types/src_apps_chifra_pkg_types_type+sort.go.tmpl
index d97533a808..01579d57f4 100644
--- a/src/dev_tools/goMaker/templates/generators/types/src_apps_chifra_pkg_types_type+sort.go.tmpl
+++ b/src/dev_tools/goMaker/templates/generators/types/src_apps_chifra_pkg_types_type+sort.go.tmpl
@@ -5,13 +5,9 @@ type {{.Class}}Field string
// Fields in the {{.Class}} struct available for sorting.
{{.SortFields}}
-// IsValid{{.Class}}Field returns true if the given field is a valid sortable {{.Class}} field.
-func IsValid{{.Class}}Field(field string) bool {
- switch field {
- case {{.SortString}}:
- return true
- }
- return false
+// GetSortFields{{.Class}} returns a []string of valid sort fields for the type.
+func GetSortFields{{.Class}}() []string {
+ return []string{ {{.SortString}} }
}
// {{.Class}}By returns a comparison function for sorting {{.Class}} instances by the given field.
diff --git a/src/dev_tools/goMaker/types/types_command.go b/src/dev_tools/goMaker/types/types_command.go
index 8583992270..42bd26908a 100644
--- a/src/dev_tools/goMaker/types/types_command.go
+++ b/src/dev_tools/goMaker/types/types_command.go
@@ -6,6 +6,7 @@ import (
"path/filepath"
"sort"
"strings"
+ "unicode"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/file"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/logger"
@@ -167,6 +168,61 @@ func (c *Command) Clean() {
}
}
+ // Validate LongName and Handler properties of each Option in cleaned
+ // Rule 1: LongName should not contain any capital letters.
+ // Rule 2: Handler (if present) must represent a sequence of integers
+ // starting from 1 without any gaps or duplicates.
+ handlerValues := make(map[int]bool)
+ maxHandler := 0
+
+ for _, op := range cleaned {
+ // Rule 1: Check for capital letters in LongName
+ if op.LongName != strings.ToLower(op.LongName) {
+ suggestion := ""
+ for i, char := range op.LongName {
+ if unicode.IsUpper(char) {
+ if i > 0 { // Only add underscore if not the first character
+ suggestion += "_"
+ }
+ suggestion += strings.ToLower(string(char))
+ } else {
+ suggestion += string(char)
+ }
+ }
+ logger.Warn(fmt.Sprintf("Option '%s' in command '%s': LongName '%s' should not contain capital letters. Suggestion: '%s'", op.LongName, c.Route, op.LongName, suggestion))
+ }
+
+ // Rule 2: Check Handler values
+ // Assuming 0.0 indicates that the handler is not set.
+ if op.Handler != 0.0 {
+ handlerVal := int(op.Handler) // Convert float64 to int
+
+ if handlerVal <= 0 { // Handlers should be positive integers
+ logger.Warn(fmt.Sprintf("Option '%s' in command '%s': Handler value '%f' must be a positive integer.", op.LongName, c.Route, op.Handler))
+ continue
+ }
+
+ if _, exists := handlerValues[handlerVal]; exists {
+ logger.Warn(fmt.Sprintf("Option '%s' in command '%s': Duplicate Handler value '%d'.", op.LongName, c.Route, handlerVal))
+ } else {
+ handlerValues[handlerVal] = true
+ }
+
+ if handlerVal > maxHandler {
+ maxHandler = handlerVal
+ }
+ }
+ }
+
+ // After collecting all handlers, check for gaps in the sequence from 1 to maxHandler
+ if maxHandler > 0 {
+ for i := 1; i <= maxHandler; i++ {
+ if _, exists := handlerValues[i]; !exists {
+ logger.Warn(fmt.Sprintf("Command '%s': Missing Handler value '%d' in the sequence.", c.Route, i))
+ }
+ }
+ }
+
c.Options = cleaned
}
diff --git a/src/dev_tools/goMaker/types/types_sorts.go b/src/dev_tools/goMaker/types/types_sorts.go
index d4d73f876e..96d93a2b06 100644
--- a/src/dev_tools/goMaker/types/types_sorts.go
+++ b/src/dev_tools/goMaker/types/types_sorts.go
@@ -15,13 +15,18 @@ if len(sortSpec.Fields) != len(sortSpec.Order) {
sorts := make([]func(p1, p2 types.{{.Class}}) bool, len(sortSpec.Fields))
for i, field := range sortSpec.Fields {
- if !types.IsValid{{.Class}}Field(field) {
+ if field == "" {
+ continue
+ }
+ if !slices.Contains(types.GetSortFields{{.Class}}(), field) {
return fmt.Errorf("%s is not an {{.Class}} sort field", field)
}
sorts[i] = types.{{.Class}}By(types.{{.Class}}Field(field), types.SortOrder(sortSpec.Order[i]))
}
-sort.Slice({{toLowerPlural .Class}}, types.{{.Class}}Cmp({{toLowerPlural .Class}}, sorts...))
+if len(sorts) > 0 {
+ sort.SliceStable({{toLowerPlural .Class}}, types.{{.Class}}Cmp({{toLowerPlural .Class}}, sorts...))
+}
return nil
}
`
diff --git a/src/dev_tools/sdkFuzzer/abis.go b/src/dev_tools/sdkFuzzer/abis.go
index 5012257afa..1993691c94 100644
--- a/src/dev_tools/sdkFuzzer/abis.go
+++ b/src/dev_tools/sdkFuzzer/abis.go
@@ -135,6 +135,16 @@ func TestAbis(which, value, fn string, opts *sdk.AbisOptions) {
ReportOkay(fn)
}
}
+ case "details":
+ if details, _, err := opts.AbisDetails(); err != nil {
+ ReportError(fn, opts, err)
+ } else {
+ if err := SaveToFile(fn, details); err != nil {
+ ReportError2(fn, err)
+ } else {
+ ReportOkay(fn)
+ }
+ }
case "count":
if count, _, err := opts.AbisCount(); err != nil {
ReportError(fn, opts, err)
diff --git a/src/dev_tools/sdkFuzzer/names.go b/src/dev_tools/sdkFuzzer/names.go
index 6207cfaaec..a92dd4a7a9 100644
--- a/src/dev_tools/sdkFuzzer/names.go
+++ b/src/dev_tools/sdkFuzzer/names.go
@@ -134,6 +134,16 @@ func TestNames(which, value, fn string, opts *sdk.NamesOptions) {
ReportOkay(fn)
}
}
+ case "count":
+ if count, _, err := opts.NamesCount(); err != nil {
+ ReportError(fn, opts, err)
+ } else {
+ if err := SaveToFile(fn, count); err != nil {
+ ReportError2(fn, err)
+ } else {
+ ReportOkay(fn)
+ }
+ }
case "autoname":
if autoname, _, err := opts.NamesAutoname(base.HexToAddress(value)); err != nil {
ReportError(fn, opts, err)
diff --git a/src/dev_tools/testRunner/testCases/abis.csv b/src/dev_tools/testRunner/testCases/abis.csv
index 7a7b49ecd1..5d0352566b 100644
--- a/src/dev_tools/testRunner/testCases/abis.csv
+++ b/src/dev_tools/testRunner/testCases/abis.csv
@@ -65,7 +65,10 @@ on ,both ,fast ,abis ,tools ,grabABI ,no_abi_found_2 ,y ,addrs =
on ,both ,fast ,abis ,tools ,grabABI ,clean_alone ,y ,decache
on ,both ,fast ,abis ,tools ,grabABI ,list ,y ,list
+on ,both ,fast ,abis ,tools ,grabABI ,list_known ,y ,list & known
on ,both ,fast ,abis ,tools ,grabABI ,list_verbose ,y ,list & verbose
+on ,both ,fast ,abis ,tools ,grabABI ,list_funcs ,y ,list & details & addrs = 0xe94327d07fc17907b4db788e5adf2ed424addff6
+on ,both ,fast ,abis ,tools ,grabABI ,list_events ,y ,list & details & addrs = 0xe94327d07fc17907b4db788e5adf2ed424addff6
on ,both ,fast ,abis ,tools ,grabABI ,count ,y ,count
on ,both ,fast ,abis ,tools ,grabABI ,count_v ,y ,count & no_header
on ,both ,fast ,abis ,tools ,grabABI ,count_list ,y ,count & list
diff --git a/src/dev_tools/testRunner/testCases/daemon.csv b/src/dev_tools/testRunner/testCases/daemon.csv
index 4999fa7886..8ccc68ecaa 100644
--- a/src/dev_tools/testRunner/testCases/daemon.csv
+++ b/src/dev_tools/testRunner/testCases/daemon.csv
@@ -1,8 +1,8 @@
enabled ,mode ,speed ,route ,path ,tool ,filename ,post ,options
on ,cmd ,fast ,daemon ,apps ,daemon ,help ,n ,@h
on ,cmd ,fast ,daemon ,apps ,daemon ,help_long ,n ,help
-on ,both ,fast ,daemon ,apps ,daemon ,bad_cmd ,n ,not-an-option
-on ,both ,fast ,daemon ,apps ,daemon ,port ,n ,not-an-option & port = :8080
+off ,both ,fast ,daemon ,apps ,daemon ,bad_cmd ,n ,not-an-option
+off ,both ,fast ,daemon ,apps ,daemon ,port ,n ,not-an-option & port = :8080
# Capabilities
# chain & fmt & help & nocolor & noop & version & verbose & no_header & file & output & append & cache & ether
diff --git a/tests/gold/apps/acctExport/acctExport_caps_allowed_m.txt b/tests/gold/apps/acctExport/acctExport_caps_allowed_m.txt
index c34d6f05c1..0dee733f15 100644
--- a/tests/gold/apps/acctExport/acctExport_caps_allowed_m.txt
+++ b/tests/gold/apps/acctExport/acctExport_caps_allowed_m.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_caps_disallowed_1_m.txt b/tests/gold/apps/acctExport/acctExport_caps_disallowed_1_m.txt
index 7e9eb70be7..a2e984f026 100644
--- a/tests/gold/apps/acctExport/acctExport_caps_disallowed_1_m.txt
+++ b/tests/gold/apps/acctExport/acctExport_caps_disallowed_1_m.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_caps_disallowed_3_m.txt b/tests/gold/apps/acctExport/acctExport_caps_disallowed_3_m.txt
index 652616f7cd..3049eb443e 100644
--- a/tests/gold/apps/acctExport/acctExport_caps_disallowed_3_m.txt
+++ b/tests/gold/apps/acctExport/acctExport_caps_disallowed_3_m.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_caps_disallowed_4_m.txt b/tests/gold/apps/acctExport/acctExport_caps_disallowed_4_m.txt
index f5891846d6..a6eb4bae99 100644
--- a/tests/gold/apps/acctExport/acctExport_caps_disallowed_4_m.txt
+++ b/tests/gold/apps/acctExport/acctExport_caps_disallowed_4_m.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_delete_1_fail.txt b/tests/gold/apps/acctExport/acctExport_monitors_delete_1_fail.txt
index 35f132acd5..f7c1c35cbd 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_delete_1_fail.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_delete_1_fail.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_batch_size2.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_batch_size2.txt
index bf9ed4ba35..19b08bf93d 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_batch_size2.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_batch_size2.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_not_both1.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_not_both1.txt
index d48fb2c262..de513dcf24 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_not_both1.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_not_both1.txt
@@ -17,7 +17,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_not_both2.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_not_both2.txt
index 5af0a15141..d5f16fe926 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_not_both2.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_not_both2.txt
@@ -17,7 +17,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_run_once.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_run_once.txt
index 21ffe7f71f..ae45438a5e 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_run_once.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_run_once.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_sleep.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_sleep.txt
index cf66ffaec6..44c25184b1 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_sleep.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_sleep.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_err_watch.txt b/tests/gold/apps/acctExport/acctExport_monitors_err_watch.txt
index 7cbf4c203a..62cff235fc 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_err_watch.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_err_watch.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_help.txt b/tests/gold/apps/acctExport/acctExport_monitors_help.txt
index cdfc89fdd0..815080d5fc 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_help.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_help.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_list1.txt b/tests/gold/apps/acctExport/acctExport_monitors_list1.txt
index 5f182be47d..9482ccc3e8 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_list1.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_list1.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_list1_v.txt b/tests/gold/apps/acctExport/acctExport_monitors_list1_v.txt
index 73429a0dbb..80df980952 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_list1_v.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_list1_v.txt
@@ -17,7 +17,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_list2.txt b/tests/gold/apps/acctExport/acctExport_monitors_list2.txt
index 4e89523982..72e0b5ddf3 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_list2.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_list2.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_list2_v.txt b/tests/gold/apps/acctExport/acctExport_monitors_list2_v.txt
index e9cca34d7f..472c649268 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_list2_v.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_list2_v.txt
@@ -17,7 +17,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_list_not_in.txt b/tests/gold/apps/acctExport/acctExport_monitors_list_not_in.txt
index 1edfde2da1..6fcebf3d07 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_list_not_in.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_list_not_in.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_long_help.txt b/tests/gold/apps/acctExport/acctExport_monitors_long_help.txt
index 4a0e89dbbd..aeec9977af 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_long_help.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_long_help.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_no_params.txt b/tests/gold/apps/acctExport/acctExport_monitors_no_params.txt
index d49fc32abd..db43b88d33 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_no_params.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_no_params.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_remove_fail.txt b/tests/gold/apps/acctExport/acctExport_monitors_remove_fail.txt
index ac6aee684b..829c99774b 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_remove_fail.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_remove_fail.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_undelete2.txt b/tests/gold/apps/acctExport/acctExport_monitors_undelete2.txt
index 93ce103784..012bca01ce 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_undelete2.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_undelete2.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/acctExport/acctExport_monitors_undelete_fail.txt b/tests/gold/apps/acctExport/acctExport_monitors_undelete_fail.txt
index 33b2eca1e7..ba45939fc0 100644
--- a/tests/gold/apps/acctExport/acctExport_monitors_undelete_fail.txt
+++ b/tests/gold/apps/acctExport/acctExport_monitors_undelete_fail.txt
@@ -16,7 +16,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/apps/chifra/chifra_help_abis.txt b/tests/gold/apps/chifra/chifra_help_abis.txt
index 621977cadc..09d466974a 100644
--- a/tests/gold/apps/chifra/chifra_help_abis.txt
+++ b/tests/gold/apps/chifra/chifra_help_abis.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/apps/chifra/chifra_help_names.txt b/tests/gold/apps/chifra/chifra_help_names.txt
index 06a88df363..096246ac97 100644
--- a/tests/gold/apps/chifra/chifra_help_names.txt
+++ b/tests/gold/apps/chifra/chifra_help_names.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/apps/chifra/chifra_help_rm.txt b/tests/gold/apps/chifra/chifra_help_rm.txt
index daff2cb792..dacf074edc 100644
--- a/tests/gold/apps/chifra/chifra_help_rm.txt
+++ b/tests/gold/apps/chifra/chifra_help_rm.txt
@@ -14,7 +14,7 @@ Flags:
--remove remove a previously deleted monitor
-C, --clean clean (i.e. remove duplicate appearances) from monitors, optionally clear stage
-l, --list list monitors in the cache (--verbose for more detail)
- -c, --count show the number of active monitors (included deleted but not removed monitors)
+ -U, --count show the number of active monitors (included deleted but not removed monitors)
-S, --staged for --clean, --list, and --count options only, include staged monitors
-D, --decache removes related items from the cache
-x, --fmt string export format, one of [none|json*|txt|csv]
diff --git a/tests/gold/tools/ethNames/ethNames_caps_allowed.txt b/tests/gold/tools/ethNames/ethNames_caps_allowed.txt
index bb21a33abb..d92c4c0b02 100644
--- a/tests/gold/tools/ethNames/ethNames_caps_allowed.txt
+++ b/tests/gold/tools/ethNames/ethNames_caps_allowed.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_caps_disallowed_1.txt b/tests/gold/tools/ethNames/ethNames_caps_disallowed_1.txt
index c387aaa097..805e247422 100644
--- a/tests/gold/tools/ethNames/ethNames_caps_disallowed_1.txt
+++ b/tests/gold/tools/ethNames/ethNames_caps_disallowed_1.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_caps_disallowed_3.txt b/tests/gold/tools/ethNames/ethNames_caps_disallowed_3.txt
index b4639d5cc1..28cde781d9 100644
--- a/tests/gold/tools/ethNames/ethNames_caps_disallowed_3.txt
+++ b/tests/gold/tools/ethNames/ethNames_caps_disallowed_3.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_caps_disallowed_4.txt b/tests/gold/tools/ethNames/ethNames_caps_disallowed_4.txt
index 7c30b419bb..3babf6ea61 100644
--- a/tests/gold/tools/ethNames/ethNames_caps_disallowed_4.txt
+++ b/tests/gold/tools/ethNames/ethNames_caps_disallowed_4.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_caps_disallowed_5.txt b/tests/gold/tools/ethNames/ethNames_caps_disallowed_5.txt
index d230464a0d..b5f4d12707 100644
--- a/tests/gold/tools/ethNames/ethNames_caps_disallowed_5.txt
+++ b/tests/gold/tools/ethNames/ethNames_caps_disallowed_5.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_edit_custom_delete.txt b/tests/gold/tools/ethNames/ethNames_edit_custom_delete.txt
index 659534ada8..ac0b6b9833 100644
--- a/tests/gold/tools/ethNames/ethNames_edit_custom_delete.txt
+++ b/tests/gold/tools/ethNames/ethNames_edit_custom_delete.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_edit_custom_undelete.txt b/tests/gold/tools/ethNames/ethNames_edit_custom_undelete.txt
index 4414a45037..7bdff38ed5 100644
--- a/tests/gold/tools/ethNames/ethNames_edit_custom_undelete.txt
+++ b/tests/gold/tools/ethNames/ethNames_edit_custom_undelete.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_edit_invalid.txt b/tests/gold/tools/ethNames/ethNames_edit_invalid.txt
index 6d8a3a85eb..2b9c9a3f76 100644
--- a/tests/gold/tools/ethNames/ethNames_edit_invalid.txt
+++ b/tests/gold/tools/ethNames/ethNames_edit_invalid.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_fmt_api.txt b/tests/gold/tools/ethNames/ethNames_fmt_api.txt
index e2fa8c11ca..572f373077 100644
--- a/tests/gold/tools/ethNames/ethNames_fmt_api.txt
+++ b/tests/gold/tools/ethNames/ethNames_fmt_api.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_fmt_junk.txt b/tests/gold/tools/ethNames/ethNames_fmt_junk.txt
index d7b33e01fc..1b75f8f8dd 100644
--- a/tests/gold/tools/ethNames/ethNames_fmt_junk.txt
+++ b/tests/gold/tools/ethNames/ethNames_fmt_junk.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_help.txt b/tests/gold/tools/ethNames/ethNames_help.txt
index 0981b1c7f6..cb4059ea65 100644
--- a/tests/gold/tools/ethNames/ethNames_help.txt
+++ b/tests/gold/tools/ethNames/ethNames_help.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_help_long.txt b/tests/gold/tools/ethNames/ethNames_help_long.txt
index 1d1bbd5564..d09035a227 100644
--- a/tests/gold/tools/ethNames/ethNames_help_long.txt
+++ b/tests/gold/tools/ethNames/ethNames_help_long.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_invalid_param_2.txt b/tests/gold/tools/ethNames/ethNames_invalid_param_2.txt
index 4e1b0329d0..d54214d094 100644
--- a/tests/gold/tools/ethNames/ethNames_invalid_param_2.txt
+++ b/tests/gold/tools/ethNames/ethNames_invalid_param_2.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_invalid_param_3.txt b/tests/gold/tools/ethNames/ethNames_invalid_param_3.txt
index b808885b05..668c19cc96 100644
--- a/tests/gold/tools/ethNames/ethNames_invalid_param_3.txt
+++ b/tests/gold/tools/ethNames/ethNames_invalid_param_3.txt
@@ -18,6 +18,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/ethNames/ethNames_tags_with_addr.txt b/tests/gold/tools/ethNames/ethNames_tags_with_addr.txt
index ed56d61724..c29b8b35e7 100644
--- a/tests/gold/tools/ethNames/ethNames_tags_with_addr.txt
+++ b/tests/gold/tools/ethNames/ethNames_tags_with_addr.txt
@@ -19,6 +19,7 @@ Flags:
-g, --tags export the list of tags and subtags only
-C, --clean clean the data (addrs to lower case, sort by addr)
-r, --regular only available with --clean, cleans regular names database
+ -U, --count return the number of names matching the search terms or other options
-d, --dry_run only available with --clean or --autoname, outputs changes to stdout instead of updating databases
-A, --autoname string an address assumed to be a token, added automatically to names database if true
--create create a new name record (hidden)
diff --git a/tests/gold/tools/grabABI/api_tests/grabABI_list_events.txt b/tests/gold/tools/grabABI/api_tests/grabABI_list_events.txt
new file mode 100644
index 0000000000..2af9ee27c1
--- /dev/null
+++ b/tests/gold/tools/grabABI/api_tests/grabABI_list_events.txt
@@ -0,0 +1,159 @@
+abis?list&details&addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6
+{
+ "data": [
+ {
+ "encoding": "0x06fdde03",
+ "name": "name",
+ "signature": "name()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x095ea7b3",
+ "name": "approve",
+ "signature": "approve(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x158ef93e",
+ "name": "initialized",
+ "signature": "initialized()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x18160ddd",
+ "name": "totalSupply",
+ "signature": "totalSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x23b872dd",
+ "name": "transferFrom",
+ "signature": "transferFrom(address,address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2988e36b",
+ "name": "migrateBalance",
+ "signature": "migrateBalance(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2a1eafd9",
+ "name": "targetSupply",
+ "signature": "targetSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x313ce567",
+ "name": "decimals",
+ "signature": "decimals()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x3f4ba83a",
+ "name": "unpause",
+ "signature": "unpause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x4b92738e",
+ "name": "migrateBalances",
+ "signature": "migrateBalances(address[])",
+ "type": "function"
+ },
+ {
+ "encoding": "0x5c975abb",
+ "name": "paused",
+ "signature": "paused()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625",
+ "name": "Pause",
+ "signature": "Pause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x70a08231",
+ "name": "balanceOf",
+ "signature": "balanceOf(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33",
+ "name": "Unpause",
+ "signature": "Unpause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8456cb59",
+ "name": "pause",
+ "signature": "pause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc",
+ "name": "Migrated",
+ "signature": "Migrated(address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ "name": "Approval",
+ "signature": "Approval(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8da5cb5b",
+ "name": "owner",
+ "signature": "owner()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x95d89b41",
+ "name": "symbol",
+ "signature": "symbol()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xa9059cbb",
+ "name": "transfer",
+ "signature": "transfer(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xb85e0aca",
+ "name": "legacyRepContract",
+ "signature": "legacyRepContract()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xdd62ed3e",
+ "name": "allowance",
+ "signature": "allowance(address,address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "name": "Transfer",
+ "signature": "Transfer(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0xf2fde38b",
+ "name": "transferOwnership",
+ "signature": "transferOwnership(address)",
+ "type": "function"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}
diff --git a/tests/gold/tools/grabABI/api_tests/grabABI_list_funcs.txt b/tests/gold/tools/grabABI/api_tests/grabABI_list_funcs.txt
new file mode 100644
index 0000000000..2af9ee27c1
--- /dev/null
+++ b/tests/gold/tools/grabABI/api_tests/grabABI_list_funcs.txt
@@ -0,0 +1,159 @@
+abis?list&details&addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6
+{
+ "data": [
+ {
+ "encoding": "0x06fdde03",
+ "name": "name",
+ "signature": "name()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x095ea7b3",
+ "name": "approve",
+ "signature": "approve(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x158ef93e",
+ "name": "initialized",
+ "signature": "initialized()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x18160ddd",
+ "name": "totalSupply",
+ "signature": "totalSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x23b872dd",
+ "name": "transferFrom",
+ "signature": "transferFrom(address,address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2988e36b",
+ "name": "migrateBalance",
+ "signature": "migrateBalance(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2a1eafd9",
+ "name": "targetSupply",
+ "signature": "targetSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x313ce567",
+ "name": "decimals",
+ "signature": "decimals()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x3f4ba83a",
+ "name": "unpause",
+ "signature": "unpause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x4b92738e",
+ "name": "migrateBalances",
+ "signature": "migrateBalances(address[])",
+ "type": "function"
+ },
+ {
+ "encoding": "0x5c975abb",
+ "name": "paused",
+ "signature": "paused()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625",
+ "name": "Pause",
+ "signature": "Pause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x70a08231",
+ "name": "balanceOf",
+ "signature": "balanceOf(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33",
+ "name": "Unpause",
+ "signature": "Unpause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8456cb59",
+ "name": "pause",
+ "signature": "pause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc",
+ "name": "Migrated",
+ "signature": "Migrated(address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ "name": "Approval",
+ "signature": "Approval(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8da5cb5b",
+ "name": "owner",
+ "signature": "owner()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x95d89b41",
+ "name": "symbol",
+ "signature": "symbol()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xa9059cbb",
+ "name": "transfer",
+ "signature": "transfer(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xb85e0aca",
+ "name": "legacyRepContract",
+ "signature": "legacyRepContract()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xdd62ed3e",
+ "name": "allowance",
+ "signature": "allowance(address,address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "name": "Transfer",
+ "signature": "Transfer(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0xf2fde38b",
+ "name": "transferOwnership",
+ "signature": "transferOwnership(address)",
+ "type": "function"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}
diff --git a/tests/gold/tools/grabABI/api_tests/grabABI_list_known.txt b/tests/gold/tools/grabABI/api_tests/grabABI_list_known.txt
new file mode 100644
index 0000000000..8fe0fcf99d
--- /dev/null
+++ b/tests/gold/tools/grabABI/api_tests/grabABI_list_known.txt
@@ -0,0 +1,189 @@
+abis?list&known
+{
+ "data": [
+ {
+ "fileSize": 3754,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00020.json"
+ },
+ {
+ "fileSize": 8051,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00721.json"
+ },
+ {
+ "fileSize": 4355,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "gitcoin.json"
+ },
+ {
+ "fileSize": 137261,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "openzeppelin.json"
+ },
+ {
+ "fileSize": 6972,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "proxy.json"
+ },
+ {
+ "fileSize": 1748,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "unchained.json"
+ },
+ {
+ "fileSize": 3368,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "unchainedV2.json"
+ },
+ {
+ "fileSize": 14333,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "uniswap-pair.json"
+ },
+ {
+ "fileSize": 40367,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "uniswap.json"
+ },
+ {
+ "fileSize": 16133,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "wallet_abis.json"
+ },
+ {
+ "fileSize": 349,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00165.json"
+ },
+ {
+ "fileSize": 7076,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00777.json"
+ },
+ {
+ "fileSize": 62261,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00998.json"
+ },
+ {
+ "fileSize": 32557,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01155.json"
+ },
+ {
+ "fileSize": 4638,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01594.json"
+ },
+ {
+ "fileSize": 5342,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01820.json"
+ },
+ {
+ "fileSize": 39649,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "loose.json"
+ },
+ {
+ "fileSize": 215572,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "aragon.json"
+ },
+ {
+ "fileSize": 19296,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "cryptokitties.json"
+ },
+ {
+ "fileSize": 12869,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "ens-old.json"
+ },
+ {
+ "fileSize": 92096,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "ens.json"
+ },
+ {
+ "fileSize": 24220,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "kickback.json"
+ },
+ {
+ "fileSize": 5305,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "maker-v1.json"
+ },
+ {
+ "fileSize": 91116,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "truebit.json"
+ },
+ {
+ "fileSize": 4071,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "diamond.json"
+ },
+ {
+ "fileSize": 32865,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "moloch.json"
+ },
+ {
+ "fileSize": 10909,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "populous.json"
+ },
+ {
+ "fileSize": 115696,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "sabilier.json"
+ },
+ {
+ "fileSize": 81144,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "set.json"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}
diff --git a/tests/gold/tools/grabABI/grabABI_caps_allowed.txt b/tests/gold/tools/grabABI/grabABI_caps_allowed.txt
index 4179a5295a..4896f8eb84 100644
--- a/tests/gold/tools/grabABI/grabABI_caps_allowed.txt
+++ b/tests/gold/tools/grabABI/grabABI_caps_allowed.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_caps_disallowed_2.txt b/tests/gold/tools/grabABI/grabABI_caps_disallowed_2.txt
index cac930ce97..2633d90354 100644
--- a/tests/gold/tools/grabABI/grabABI_caps_disallowed_2.txt
+++ b/tests/gold/tools/grabABI/grabABI_caps_disallowed_2.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_caps_disallowed_3.txt b/tests/gold/tools/grabABI/grabABI_caps_disallowed_3.txt
index e084e13ac0..d6ea0548fb 100644
--- a/tests/gold/tools/grabABI/grabABI_caps_disallowed_3.txt
+++ b/tests/gold/tools/grabABI/grabABI_caps_disallowed_3.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_clean_fail_1.txt b/tests/gold/tools/grabABI/grabABI_clean_fail_1.txt
index 361c885ddb..65e652b0f0 100644
--- a/tests/gold/tools/grabABI/grabABI_clean_fail_1.txt
+++ b/tests/gold/tools/grabABI/grabABI_clean_fail_1.txt
@@ -14,7 +14,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_clean_fail_2.txt b/tests/gold/tools/grabABI/grabABI_clean_fail_2.txt
index ac47c3c998..662d444adf 100644
--- a/tests/gold/tools/grabABI/grabABI_clean_fail_2.txt
+++ b/tests/gold/tools/grabABI/grabABI_clean_fail_2.txt
@@ -14,7 +14,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_clean_fail_3.txt b/tests/gold/tools/grabABI/grabABI_clean_fail_3.txt
index 8dcc6b2149..d6bf79e586 100644
--- a/tests/gold/tools/grabABI/grabABI_clean_fail_3.txt
+++ b/tests/gold/tools/grabABI/grabABI_clean_fail_3.txt
@@ -15,7 +15,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_count_fail.txt b/tests/gold/tools/grabABI/grabABI_count_fail.txt
index cced60ebf2..2d7937529d 100644
--- a/tests/gold/tools/grabABI/grabABI_count_fail.txt
+++ b/tests/gold/tools/grabABI/grabABI_count_fail.txt
@@ -14,7 +14,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_findSig_junk.txt b/tests/gold/tools/grabABI/grabABI_findSig_junk.txt
index 6a7323c621..20f71eb4e8 100644
--- a/tests/gold/tools/grabABI/grabABI_findSig_junk.txt
+++ b/tests/gold/tools/grabABI/grabABI_findSig_junk.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_findSig_toolong.txt b/tests/gold/tools/grabABI/grabABI_findSig_toolong.txt
index e89759058a..fcb5c6e3ce 100644
--- a/tests/gold/tools/grabABI/grabABI_findSig_toolong.txt
+++ b/tests/gold/tools/grabABI/grabABI_findSig_toolong.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_findSig_toolongevt1.txt b/tests/gold/tools/grabABI/grabABI_findSig_toolongevt1.txt
index 730be1368d..9a807dcf27 100644
--- a/tests/gold/tools/grabABI/grabABI_findSig_toolongevt1.txt
+++ b/tests/gold/tools/grabABI/grabABI_findSig_toolongevt1.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_findSig_toolongevt2.txt b/tests/gold/tools/grabABI/grabABI_findSig_toolongevt2.txt
index a6617bc5fd..e4ab8867b2 100644
--- a/tests/gold/tools/grabABI/grabABI_findSig_toolongevt2.txt
+++ b/tests/gold/tools/grabABI/grabABI_findSig_toolongevt2.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_findSig_tooshort.txt b/tests/gold/tools/grabABI/grabABI_findSig_tooshort.txt
index 8760c980dd..09dfc0192f 100644
--- a/tests/gold/tools/grabABI/grabABI_findSig_tooshort.txt
+++ b/tests/gold/tools/grabABI/grabABI_findSig_tooshort.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_fmt_api.txt b/tests/gold/tools/grabABI/grabABI_fmt_api.txt
index 43fc6b5fc0..900cb74c28 100644
--- a/tests/gold/tools/grabABI/grabABI_fmt_api.txt
+++ b/tests/gold/tools/grabABI/grabABI_fmt_api.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_fmt_junk.txt b/tests/gold/tools/grabABI/grabABI_fmt_junk.txt
index 3d0c0c6f46..abef6b0841 100644
--- a/tests/gold/tools/grabABI/grabABI_fmt_junk.txt
+++ b/tests/gold/tools/grabABI/grabABI_fmt_junk.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_help.txt b/tests/gold/tools/grabABI/grabABI_help.txt
index 10b721cadc..6f397af6b8 100644
--- a/tests/gold/tools/grabABI/grabABI_help.txt
+++ b/tests/gold/tools/grabABI/grabABI_help.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_help_long.txt b/tests/gold/tools/grabABI/grabABI_help_long.txt
index 1ae8e23a79..d15588f22e 100644
--- a/tests/gold/tools/grabABI/grabABI_help_long.txt
+++ b/tests/gold/tools/grabABI/grabABI_help_long.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_invalid_1.txt b/tests/gold/tools/grabABI/grabABI_invalid_1.txt
index d893242d82..6123c37a82 100644
--- a/tests/gold/tools/grabABI/grabABI_invalid_1.txt
+++ b/tests/gold/tools/grabABI/grabABI_invalid_1.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_invalid_option.txt b/tests/gold/tools/grabABI/grabABI_invalid_option.txt
index 8c3c94086b..718cce166e 100644
--- a/tests/gold/tools/grabABI/grabABI_invalid_option.txt
+++ b/tests/gold/tools/grabABI/grabABI_invalid_option.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_known_trueara.txt b/tests/gold/tools/grabABI/grabABI_known_trueara.txt
index b38511a834..8b3a9ca380 100644
--- a/tests/gold/tools/grabABI/grabABI_known_trueara.txt
+++ b/tests/gold/tools/grabABI/grabABI_known_trueara.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_known_trueclasses.txt b/tests/gold/tools/grabABI/grabABI_known_trueclasses.txt
index 454afffeae..b89e558609 100644
--- a/tests/gold/tools/grabABI/grabABI_known_trueclasses.txt
+++ b/tests/gold/tools/grabABI/grabABI_known_trueclasses.txt
@@ -12,7 +12,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/grabABI_list_events.txt b/tests/gold/tools/grabABI/grabABI_list_events.txt
new file mode 100644
index 0000000000..cbaf2f7350
--- /dev/null
+++ b/tests/gold/tools/grabABI/grabABI_list_events.txt
@@ -0,0 +1,31 @@
+chifra abis --list --details 0xe94327d07fc17907b4db788e5adf2ed424addff6
+TEST[DATE|TIME] Addrs: [0xe94327d07fc17907b4db788e5adf2ed424addff6]
+TEST[DATE|TIME] List: true
+TEST[DATE|TIME] Details: true
+TEST[DATE|TIME] Caps: cache,decache
+TEST[DATE|TIME] Format: txt
+encoding type name signature
+0x06fdde03 function name name()
+0x095ea7b3 function approve approve(address,uint256)
+0x158ef93e function initialized initialized()
+0x18160ddd function totalSupply totalSupply()
+0x23b872dd function transferFrom transferFrom(address,address,uint256)
+0x2988e36b function migrateBalance migrateBalance(address)
+0x2a1eafd9 function targetSupply targetSupply()
+0x313ce567 function decimals decimals()
+0x3f4ba83a function unpause unpause()
+0x4b92738e function migrateBalances migrateBalances(address[])
+0x5c975abb function paused paused()
+0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625 event Pause Pause()
+0x70a08231 function balanceOf balanceOf(address)
+0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33 event Unpause Unpause()
+0x8456cb59 function pause pause()
+0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc event Migrated Migrated(address,uint256)
+0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 event Approval Approval(address,address,uint256)
+0x8da5cb5b function owner owner()
+0x95d89b41 function symbol symbol()
+0xa9059cbb function transfer transfer(address,uint256)
+0xb85e0aca function legacyRepContract legacyRepContract()
+0xdd62ed3e function allowance allowance(address,address)
+0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef event Transfer Transfer(address,address,uint256)
+0xf2fde38b function transferOwnership transferOwnership(address)
diff --git a/tests/gold/tools/grabABI/grabABI_list_funcs.txt b/tests/gold/tools/grabABI/grabABI_list_funcs.txt
new file mode 100644
index 0000000000..cbaf2f7350
--- /dev/null
+++ b/tests/gold/tools/grabABI/grabABI_list_funcs.txt
@@ -0,0 +1,31 @@
+chifra abis --list --details 0xe94327d07fc17907b4db788e5adf2ed424addff6
+TEST[DATE|TIME] Addrs: [0xe94327d07fc17907b4db788e5adf2ed424addff6]
+TEST[DATE|TIME] List: true
+TEST[DATE|TIME] Details: true
+TEST[DATE|TIME] Caps: cache,decache
+TEST[DATE|TIME] Format: txt
+encoding type name signature
+0x06fdde03 function name name()
+0x095ea7b3 function approve approve(address,uint256)
+0x158ef93e function initialized initialized()
+0x18160ddd function totalSupply totalSupply()
+0x23b872dd function transferFrom transferFrom(address,address,uint256)
+0x2988e36b function migrateBalance migrateBalance(address)
+0x2a1eafd9 function targetSupply targetSupply()
+0x313ce567 function decimals decimals()
+0x3f4ba83a function unpause unpause()
+0x4b92738e function migrateBalances migrateBalances(address[])
+0x5c975abb function paused paused()
+0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625 event Pause Pause()
+0x70a08231 function balanceOf balanceOf(address)
+0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33 event Unpause Unpause()
+0x8456cb59 function pause pause()
+0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc event Migrated Migrated(address,uint256)
+0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 event Approval Approval(address,address,uint256)
+0x8da5cb5b function owner owner()
+0x95d89b41 function symbol symbol()
+0xa9059cbb function transfer transfer(address,uint256)
+0xb85e0aca function legacyRepContract legacyRepContract()
+0xdd62ed3e function allowance allowance(address,address)
+0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef event Transfer Transfer(address,address,uint256)
+0xf2fde38b function transferOwnership transferOwnership(address)
diff --git a/tests/gold/tools/grabABI/grabABI_list_known.txt b/tests/gold/tools/grabABI/grabABI_list_known.txt
new file mode 100644
index 0000000000..e6dce81cb1
--- /dev/null
+++ b/tests/gold/tools/grabABI/grabABI_list_known.txt
@@ -0,0 +1,35 @@
+chifra abis --list --known
+TEST[DATE|TIME] Known: true
+TEST[DATE|TIME] List: true
+TEST[DATE|TIME] Caps: cache,decache
+TEST[DATE|TIME] Format: txt
+address name lastModDate fileSize isKnown
+ erc_00020.json --date-- 3754 true
+ erc_00721.json --date-- 8051 true
+ gitcoin.json --date-- 4355 true
+ openzeppelin.json --date-- 137261 true
+ proxy.json --date-- 6972 true
+ unchained.json --date-- 1748 true
+ unchainedV2.json --date-- 3368 true
+ uniswap-pair.json --date-- 14333 true
+ uniswap.json --date-- 40367 true
+ wallet_abis.json --date-- 16133 true
+ erc_00165.json --date-- 349 true
+ erc_00777.json --date-- 7076 true
+ erc_00998.json --date-- 62261 true
+ erc_01155.json --date-- 32557 true
+ erc_01594.json --date-- 4638 true
+ erc_01820.json --date-- 5342 true
+ loose.json --date-- 39649 true
+ aragon.json --date-- 215572 true
+ cryptokitties.json --date-- 19296 true
+ ens-old.json --date-- 12869 true
+ ens.json --date-- 92096 true
+ kickback.json --date-- 24220 true
+ maker-v1.json --date-- 5305 true
+ truebit.json --date-- 91116 true
+ diamond.json --date-- 4071 true
+ moloch.json --date-- 32865 true
+ populous.json --date-- 10909 true
+ sabilier.json --date-- 115696 true
+ set.json --date-- 81144 true
diff --git a/tests/gold/tools/grabABI/grabABI_proxy_fail.txt b/tests/gold/tools/grabABI/grabABI_proxy_fail.txt
index d46a5d52db..c10828e9be 100644
--- a/tests/gold/tools/grabABI/grabABI_proxy_fail.txt
+++ b/tests/gold/tools/grabABI/grabABI_proxy_fail.txt
@@ -13,7 +13,8 @@ Flags:
-k, --known load common 'known' ABIs from cache
-r, --proxy_for string redirects the query to this implementation
-l, --list a list of downloaded abi files
- -c, --count show the number of abis downloaded
+ -d, --details show the functions and events instead of summaries for all abi files
+ -U, --count show the number of abis downloaded
-f, --find strings search for function or event declarations given a four- or 32-byte code(s)
-n, --hint strings for the --find option only, provide hints to speed up the search
-e, --encode string generate the 32-byte encoding for a given canonical function or event signature
diff --git a/tests/gold/tools/grabABI/sdk_tests/grabABI_list_events.txt b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_events.txt
new file mode 100644
index 0000000000..07937ca0c0
--- /dev/null
+++ b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_events.txt
@@ -0,0 +1,166 @@
+abis?list&details&addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6
+Args: [list details addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6]
+Opts: {"addrs":["0xe94327d07fc17907b4db788e5adf2ed424addff6"],"proxyFor":"0x0","list":true,"details":true}
+Addrs: [0xe94327d07fc17907b4db788e5adf2ed424addff6]
+List: true
+Details: true
+Caps: cache,decache
+Format: json
+{
+ "data": [
+ {
+ "encoding": "0x06fdde03",
+ "name": "name",
+ "signature": "name()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x095ea7b3",
+ "name": "approve",
+ "signature": "approve(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x158ef93e",
+ "name": "initialized",
+ "signature": "initialized()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x18160ddd",
+ "name": "totalSupply",
+ "signature": "totalSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x23b872dd",
+ "name": "transferFrom",
+ "signature": "transferFrom(address,address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2988e36b",
+ "name": "migrateBalance",
+ "signature": "migrateBalance(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2a1eafd9",
+ "name": "targetSupply",
+ "signature": "targetSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x313ce567",
+ "name": "decimals",
+ "signature": "decimals()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x3f4ba83a",
+ "name": "unpause",
+ "signature": "unpause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x4b92738e",
+ "name": "migrateBalances",
+ "signature": "migrateBalances(address[])",
+ "type": "function"
+ },
+ {
+ "encoding": "0x5c975abb",
+ "name": "paused",
+ "signature": "paused()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625",
+ "name": "Pause",
+ "signature": "Pause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x70a08231",
+ "name": "balanceOf",
+ "signature": "balanceOf(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33",
+ "name": "Unpause",
+ "signature": "Unpause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8456cb59",
+ "name": "pause",
+ "signature": "pause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc",
+ "name": "Migrated",
+ "signature": "Migrated(address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ "name": "Approval",
+ "signature": "Approval(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8da5cb5b",
+ "name": "owner",
+ "signature": "owner()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x95d89b41",
+ "name": "symbol",
+ "signature": "symbol()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xa9059cbb",
+ "name": "transfer",
+ "signature": "transfer(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xb85e0aca",
+ "name": "legacyRepContract",
+ "signature": "legacyRepContract()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xdd62ed3e",
+ "name": "allowance",
+ "signature": "allowance(address,address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "name": "Transfer",
+ "signature": "Transfer(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0xf2fde38b",
+ "name": "transferOwnership",
+ "signature": "transferOwnership(address)",
+ "type": "function"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}
diff --git a/tests/gold/tools/grabABI/sdk_tests/grabABI_list_funcs.txt b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_funcs.txt
new file mode 100644
index 0000000000..07937ca0c0
--- /dev/null
+++ b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_funcs.txt
@@ -0,0 +1,166 @@
+abis?list&details&addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6
+Args: [list details addrs=0xe94327d07fc17907b4db788e5adf2ed424addff6]
+Opts: {"addrs":["0xe94327d07fc17907b4db788e5adf2ed424addff6"],"proxyFor":"0x0","list":true,"details":true}
+Addrs: [0xe94327d07fc17907b4db788e5adf2ed424addff6]
+List: true
+Details: true
+Caps: cache,decache
+Format: json
+{
+ "data": [
+ {
+ "encoding": "0x06fdde03",
+ "name": "name",
+ "signature": "name()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x095ea7b3",
+ "name": "approve",
+ "signature": "approve(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x158ef93e",
+ "name": "initialized",
+ "signature": "initialized()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x18160ddd",
+ "name": "totalSupply",
+ "signature": "totalSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x23b872dd",
+ "name": "transferFrom",
+ "signature": "transferFrom(address,address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2988e36b",
+ "name": "migrateBalance",
+ "signature": "migrateBalance(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x2a1eafd9",
+ "name": "targetSupply",
+ "signature": "targetSupply()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x313ce567",
+ "name": "decimals",
+ "signature": "decimals()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x3f4ba83a",
+ "name": "unpause",
+ "signature": "unpause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x4b92738e",
+ "name": "migrateBalances",
+ "signature": "migrateBalances(address[])",
+ "type": "function"
+ },
+ {
+ "encoding": "0x5c975abb",
+ "name": "paused",
+ "signature": "paused()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff625",
+ "name": "Pause",
+ "signature": "Pause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x70a08231",
+ "name": "balanceOf",
+ "signature": "balanceOf(address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0x7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b33",
+ "name": "Unpause",
+ "signature": "Unpause()",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8456cb59",
+ "name": "pause",
+ "signature": "pause()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x8b80bd19aea7b735bc6d75db8d6adbe18b28c30d62b3555245eb67b2340caedc",
+ "name": "Migrated",
+ "signature": "Migrated(address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ "name": "Approval",
+ "signature": "Approval(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0x8da5cb5b",
+ "name": "owner",
+ "signature": "owner()",
+ "type": "function"
+ },
+ {
+ "encoding": "0x95d89b41",
+ "name": "symbol",
+ "signature": "symbol()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xa9059cbb",
+ "name": "transfer",
+ "signature": "transfer(address,uint256)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xb85e0aca",
+ "name": "legacyRepContract",
+ "signature": "legacyRepContract()",
+ "type": "function"
+ },
+ {
+ "encoding": "0xdd62ed3e",
+ "name": "allowance",
+ "signature": "allowance(address,address)",
+ "type": "function"
+ },
+ {
+ "encoding": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "name": "Transfer",
+ "signature": "Transfer(address,address,uint256)",
+ "type": "event"
+ },
+ {
+ "encoding": "0xf2fde38b",
+ "name": "transferOwnership",
+ "signature": "transferOwnership(address)",
+ "type": "function"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}
diff --git a/tests/gold/tools/grabABI/sdk_tests/grabABI_list_known.txt b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_known.txt
new file mode 100644
index 0000000000..e70803f410
--- /dev/null
+++ b/tests/gold/tools/grabABI/sdk_tests/grabABI_list_known.txt
@@ -0,0 +1,195 @@
+abis?list&known
+Args: [list known]
+Opts: {"known":true,"proxyFor":"0x0","list":true}
+Known: true
+List: true
+Caps: cache,decache
+Format: json
+{
+ "data": [
+ {
+ "fileSize": 3754,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00020.json"
+ },
+ {
+ "fileSize": 8051,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00721.json"
+ },
+ {
+ "fileSize": 4355,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "gitcoin.json"
+ },
+ {
+ "fileSize": 137261,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "openzeppelin.json"
+ },
+ {
+ "fileSize": 6972,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "proxy.json"
+ },
+ {
+ "fileSize": 1748,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "unchained.json"
+ },
+ {
+ "fileSize": 3368,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "unchainedV2.json"
+ },
+ {
+ "fileSize": 14333,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "uniswap-pair.json"
+ },
+ {
+ "fileSize": 40367,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "uniswap.json"
+ },
+ {
+ "fileSize": 16133,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "wallet_abis.json"
+ },
+ {
+ "fileSize": 349,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00165.json"
+ },
+ {
+ "fileSize": 7076,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00777.json"
+ },
+ {
+ "fileSize": 62261,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_00998.json"
+ },
+ {
+ "fileSize": 32557,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01155.json"
+ },
+ {
+ "fileSize": 4638,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01594.json"
+ },
+ {
+ "fileSize": 5342,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "erc_01820.json"
+ },
+ {
+ "fileSize": 39649,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "loose.json"
+ },
+ {
+ "fileSize": 215572,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "aragon.json"
+ },
+ {
+ "fileSize": 19296,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "cryptokitties.json"
+ },
+ {
+ "fileSize": 12869,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "ens-old.json"
+ },
+ {
+ "fileSize": 92096,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "ens.json"
+ },
+ {
+ "fileSize": 24220,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "kickback.json"
+ },
+ {
+ "fileSize": 5305,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "maker-v1.json"
+ },
+ {
+ "fileSize": 91116,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "truebit.json"
+ },
+ {
+ "fileSize": 4071,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "diamond.json"
+ },
+ {
+ "fileSize": 32865,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "moloch.json"
+ },
+ {
+ "fileSize": 10909,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "populous.json"
+ },
+ {
+ "fileSize": 115696,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "sabilier.json"
+ },
+ {
+ "fileSize": 81144,
+ "isKnown": true,
+ "lastModDate": "--date--",
+ "name": "set.json"
+ }
+ ],
+ "meta": {
+ "client": "0xdeadbeef",
+ "finalized": "0xdeadbeef",
+ "staging": "0xdeadbeef",
+ "ripe": "0xdeadbeef",
+ "unripe": "0xdeadbeef",
+ "chainId": 1,
+ "networkId": 1,
+ "chain": "mainnet"
+ }
+}