diff --git a/.golangci.yml b/.golangci.yml index a037d6d7..ccdc3b2c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,239 +1,42 @@ -# Source: https://github.com/golangci/golangci-lint/blob/master/.golangci.example.yml -# options for analysis running +# This file configures github.com/golangci/golangci-lint. + run: - # default concurrency is a available CPU number - concurrency: 4 - - # timeout for analysis, e.g. 30s, 5m, default is 1m - deadline: 1m - - # exit code when at least one issue was found, default is 1 - issues-exit-code: 1 - - # include test files or not, default is true + timeout: 2m tests: true - - # list of build tags, all linters use it. Default is empty list. - #build-tags: - - # which dirs to skip: they won't be analyzed; - # can use regexp here: generated.*, regexp is applied on full path; - # default value is empty list, but next dirs are always skipped independently - # from this option's value: - # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - #skip-dirs: - - # which files to skip: they will be analyzed, but issues from them - # won't be reported. Default value is empty list, but there is - # no need to include all autogenerated files, we confidently recognize - # autogenerated files. If it's not please let us know. - #skip-files: - - # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - #modules-download-mode: (release|readonly|vendor) - - -# output configuration options -output: - # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" - format: colored-line-number - - # print lines of code with issue, default is true - print-issued-lines: true - - # print linter name in the end of issue text, default is true - print-linter-name: true - - -# all available settings of specific linters -linters-settings: - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: false - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - ignore: fmt:.*,io/ioutil:^Read.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - #exclude: /path/to/file.txt - govet: - # report about shadowed variables - check-shadowing: false - - # settings per analyzer - settings: - printf: # analyzer name, run `go tool vet help` to see all analyzers - funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf - - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf - golint: - # minimal confidence for issues, default is 0.8 - min-confidence: 0.8 - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true - goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - #local-prefixes: github.com/org/project - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - min-complexity: 10 - maligned: - # print struct with more effective memory layout or not, false by default - suggest-new: true - dupl: - # tokens count to trigger issue, 150 by default - threshold: 100 - goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 - depguard: - list-type: blacklist - include-go-root: false - packages: - - github.com/davecgh/go-spew/spew - misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - ignore-words: - - gossamer - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 120 - # tab width in spaces. Default to 1. - tab-width: 1 - unused: - # treat code as a program (not a library) and report unused exported identifiers; default is false. - # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find funcs usages. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 30 - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - gocritic: - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - disabled-checks: - - regexpMust - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint` run to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 32 + skip-dirs-use-default: true linters: enable: - - govet - - megacheck + - bodyclose + - deadcode + - depguard + - dogsled + - errcheck + - goconst + - gocyclo - gofmt - goimports - enable-all: false - disable: - - maligned - - prealloc - - unparam - disable-all: false - presets: - - bugs + - golint + - gosec + - gosimple + - govet + - ineffassign + - interfacer + - misspell + - scopelint + - staticcheck + - structcheck + - stylecheck + - typecheck + - unconvert - unused - fast: false - + - varcheck issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` - #exclude: - - # Excluding configuration per-path, per-linter, per-text and per-source exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go + - text: "comment on exported var" linters: - - gocyclo - - errcheck - - dupl - - gosec - - # Exclude known linters from partially hard-vendored code, - # which is impossible to exclude via "nolint" comments. - - path: internal/hmac/ - text: "weak cryptographic primitive" + - golint + - text: "ST1005:" linters: - - gosec - - # Exclude some staticcheck messages - - linters: - - staticcheck - text: "SA9003:" - - # Exclude lll issues for long lines with go:generate - - linters: - - lll - source: "^//go:generate " - text: "long-lines" - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false - - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-per-linter: 0 - - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. - max-same-issues: 0 - - # Show only new issues: if there are unstaged changes or untracked files, - # only those changes are analyzed, else only changes in HEAD~ are analyzed. - # It's a super-useful option for integration of golangci-lint into existing - # large codebase. It's not practical to fix all existing issues at the moment - # of integration: much better don't allow issues in new code. - # Default is false. - new: false \ No newline at end of file + - stylecheck \ No newline at end of file diff --git a/client/genaccounts/main.go b/client/genaccounts/main.go index 4d995f32..46c68e8e 100644 --- a/client/genaccounts/main.go +++ b/client/genaccounts/main.go @@ -33,7 +33,6 @@ const ( func AddGenesisAccountCmd( ctx *server.Context, cdc *codec.Codec, defaultNodeHome, defaultClientHome string, ) *cobra.Command { - cmd := &cobra.Command{ Use: "add-genesis-account [address_or_key_name] [coin][,[coin]]", Short: "Add a genesis account to genesis.json", diff --git a/cmd/emintcli/keys.go b/cmd/emintcli/keys.go index 4505e120..4238d240 100644 --- a/cmd/emintcli/keys.go +++ b/cmd/emintcli/keys.go @@ -51,7 +51,7 @@ func keyCommands() *cobra.Command { return cmd } -func getKeybase(cmd *cobra.Command, dryrun bool, buf io.Reader) (keys.Keybase, error) { +func getKeybase(dryrun bool, buf io.Reader) (keys.Keybase, error) { if dryrun { return keys.NewInMemory(keys.WithKeygenFunc(ethermintKeygenFunc)), nil } @@ -61,7 +61,7 @@ func getKeybase(cmd *cobra.Command, dryrun bool, buf io.Reader) (keys.Keybase, e func runAddCmd(cmd *cobra.Command, args []string) error { inBuf := bufio.NewReader(cmd.InOrStdin()) - kb, err := getKeybase(cmd, viper.GetBool(flagDryRun), inBuf) + kb, err := getKeybase(viper.GetBool(flagDryRun), inBuf) if err != nil { return err } diff --git a/crypto/keys/mintkey/mintkey.go b/crypto/keys/mintkey/mintkey.go index 544120bf..c53aceac 100644 --- a/crypto/keys/mintkey/mintkey.go +++ b/crypto/keys/mintkey/mintkey.go @@ -23,7 +23,8 @@ const ( blockTypePubKey = "ETHERMINT PUBLIC KEY" ) -// Make bcrypt security parameter var, so it can be changed within the lcd test +// BcryptSecurityParameter is the security parameter var, +// so it can be changed within the lcd test // Making the bcrypt security parameter a var shouldn't be a security issue: // One can't verify an invalid key by maliciously changing the bcrypt // parameter during a runtime vulnerability. The main security diff --git a/importer/importer_test.go b/importer/importer_test.go index 3e41725d..26cd6656 100644 --- a/importer/importer_test.go +++ b/importer/importer_test.go @@ -235,7 +235,7 @@ func TestImportBlocks(t *testing.T) { ctx := sdk.NewContext(ms, abci.Header{}, false, logger) ctx = ctx.WithBlockHeight(int64(block.NumberU64())) - stateDB := createStateDB(t, ctx, ak) + stateDB := createStateDB(ctx, ak) if chainConfig.DAOForkSupport && chainConfig.DAOForkBlock != nil && chainConfig.DAOForkBlock.Cmp(block.Number()) == 0 { applyDAOHardFork(stateDB) @@ -268,7 +268,7 @@ func TestImportBlocks(t *testing.T) { } } -func createStateDB(t *testing.T, ctx sdk.Context, ak auth.AccountKeeper) *evmtypes.CommitStateDB { +func createStateDB(ctx sdk.Context, ak auth.AccountKeeper) *evmtypes.CommitStateDB { stateDB := evmtypes.NewCommitStateDB(ctx, ak, storageKey, codeKey) return stateDB } diff --git a/rpc/eth_api.go b/rpc/eth_api.go index f609ed35..95ac3438 100644 --- a/rpc/eth_api.go +++ b/rpc/eth_api.go @@ -279,7 +279,7 @@ func (e *PublicEthAPI) SendTransaction(args params.SendTxArgs) (common.Hash, err intChainID, ok := new(big.Int).SetString(chainID, 10) if !ok { return common.Hash{}, fmt.Errorf( - fmt.Sprintf("Invalid chainID: %s, must be integer format", chainID)) + fmt.Sprintf("invalid chainID: %s, must be integer format", chainID)) } // Sign transaction @@ -592,7 +592,7 @@ func bytesToEthTx(cliCtx context.CLIContext, bz []byte) (*types.EthereumTxMsg, e err := cliCtx.Codec.UnmarshalBinaryLengthPrefixed(bz, &stdTx) ethTx, ok := stdTx.(*types.EthereumTxMsg) if !ok || err != nil { - return nil, fmt.Errorf("Invalid transaction type, must be an amino encoded Ethereum transaction") + return nil, fmt.Errorf("invalid transaction type, must be an amino encoded Ethereum transaction") } return ethTx, nil } diff --git a/rpc/filter_api.go b/rpc/filter_api.go index 983de473..06a929ea 100644 --- a/rpc/filter_api.go +++ b/rpc/filter_api.go @@ -39,23 +39,22 @@ func (e *PublicFilterAPI) GetLogs(criteria filters.FilterCriteria) ([]*ethtypes. results := e.getLogs() logs := filterLogs(results, nil, nil, filter.addresses, filter.topics) return logs, nil - } else { - // Convert the RPC block numbers into internal representations - begin := rpc.LatestBlockNumber.Int64() - if criteria.FromBlock != nil { - begin = criteria.FromBlock.Int64() - } - from := big.NewInt(begin) - end := rpc.LatestBlockNumber.Int64() - if criteria.ToBlock != nil { - end = criteria.ToBlock.Int64() - } - to := big.NewInt(end) - results := e.getLogs() - logs := filterLogs(results, from, to, criteria.Addresses, criteria.Topics) - - return returnLogs(logs), nil } + // Convert the RPC block numbers into internal representations + begin := rpc.LatestBlockNumber.Int64() + if criteria.FromBlock != nil { + begin = criteria.FromBlock.Int64() + } + from := big.NewInt(begin) + end := rpc.LatestBlockNumber.Int64() + if criteria.ToBlock != nil { + end = criteria.ToBlock.Int64() + } + to := big.NewInt(end) + results := e.getLogs() + logs := filterLogs(results, from, to, criteria.Addresses, criteria.Topics) + + return returnLogs(logs), nil } func (e *PublicFilterAPI) getLogs() (results []*ethtypes.Log) { diff --git a/rpc/tester/tester_test.go b/rpc/tester/tester_test.go index 0cdbf7db..cc9342a1 100644 --- a/rpc/tester/tester_test.go +++ b/rpc/tester/tester_test.go @@ -63,6 +63,7 @@ func call(method string, params []string) (*Response, error) { return nil, err } + /* #nosec */ res, err := http.Post(addr, "application/json", bytes.NewBuffer(req)) if err != nil { return nil, err @@ -122,7 +123,6 @@ func TestEth_blockNumber(t *testing.T) { } t.Logf("Got block number: %s\n", res.String()) - } func TestEth_GetBalance(t *testing.T) { @@ -144,7 +144,6 @@ func TestEth_GetBalance(t *testing.T) { if res.ToInt().Cmp(big.NewInt(0)) != 0 { t.Errorf("expected balance: %d, got: %s", 0, res.String()) } - } func TestEth_GetStorageAt(t *testing.T) { diff --git a/rpc/types.go b/rpc/types.go index 89008f6f..ab776141 100644 --- a/rpc/types.go +++ b/rpc/types.go @@ -49,7 +49,7 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error { return err } if blckNum > math.MaxInt64 { - return fmt.Errorf("Blocknumber too high") + return fmt.Errorf("blocknumber too high") } *bn = BlockNumber(blckNum) diff --git a/x/evm/keeper.go b/x/evm/keeper.go index 290c720b..1b964d2a 100644 --- a/x/evm/keeper.go +++ b/x/evm/keeper.go @@ -34,7 +34,7 @@ func (c *count) get() int { } func (c *count) increment() { - *c = *c + 1 + *c++ } func (c *count) reset() { diff --git a/x/evm/types/querier.go b/x/evm/types/querier.go index 77ad945f..35bce0b0 100644 --- a/x/evm/types/querier.go +++ b/x/evm/types/querier.go @@ -66,7 +66,7 @@ type QueryETHLogs struct { } func (q QueryETHLogs) String() string { - return string(fmt.Sprintf("%+v", q.Logs)) + return fmt.Sprintf("%+v", q.Logs) } // QueryBloomFilter is response type for tx logs query