dev: fix: all remaining lint issues

This commit is contained in:
marcello33 2023-06-19 11:39:59 +02:00
parent f3ffacf2d7
commit 99693ef56c
115 changed files with 431 additions and 405 deletions

View file

@ -637,7 +637,7 @@ func (b *SimulatedBackend) EstimateGas(ctx context.Context, call ethereum.CallMs
// callContract implements common code between normal and pending contract calls. // callContract implements common code between normal and pending contract calls.
// state is modified during execution, make sure to copy it if necessary. // state is modified during execution, make sure to copy it if necessary.
func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallMsg, header *types.Header, stateDB *state.StateDB) (*core.ExecutionResult, error) { func (b *SimulatedBackend) callContract(_ context.Context, call ethereum.CallMsg, header *types.Header, stateDB *state.StateDB) (*core.ExecutionResult, error) {
// Gas prices post 1559 need to be initialized // Gas prices post 1559 need to be initialized
if call.GasPrice != nil && (call.GasFeeCap != nil || call.GasTipCap != nil) { if call.GasPrice != nil && (call.GasFeeCap != nil || call.GasTipCap != nil) {
return nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified") return nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")

View file

@ -1483,7 +1483,7 @@ func TestCommitReturnValue(t *testing.T) {
gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1))
_tx := types.NewTransaction(0, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil) _tx := types.NewTransaction(0, testAddr, big.NewInt(1000), params.TxGas, gasPrice, nil)
tx, _ := types.SignTx(_tx, types.HomesteadSigner{}, testKey) tx, _ := types.SignTx(_tx, types.HomesteadSigner{}, testKey)
sim.SendTransaction(context.Background(), tx) _ = sim.SendTransaction(context.Background(), tx)
h2 := sim.Commit() h2 := sim.Commit()
// Create another block in the original chain // Create another block in the original chain
@ -1518,8 +1518,8 @@ func TestAdjustTimeAfterFork(t *testing.T) {
sim.Commit() // h1 sim.Commit() // h1
h1 := sim.blockchain.CurrentHeader().Hash() h1 := sim.blockchain.CurrentHeader().Hash()
sim.Commit() // h2 sim.Commit() // h2
sim.Fork(context.Background(), h1) _ = sim.Fork(context.Background(), h1)
sim.AdjustTime(1 * time.Second) _ = sim.AdjustTime(1 * time.Second)
sim.Commit() sim.Commit()
head := sim.blockchain.CurrentHeader() head := sim.blockchain.CurrentHeader()

View file

@ -528,8 +528,8 @@ func TestCall(t *testing.T) {
func TestCrashers(t *testing.T) { func TestCrashers(t *testing.T) {
t.Parallel() t.Parallel()
abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"_1"}]}]}]`)) _, _ = abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"_1"}]}]}]`))
abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"&"}]}]}]`)) _, _ = abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"&"}]}]}]`))
abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"----"}]}]}]`)) _, _ = abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"----"}]}]}]`))
abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"foo.Bar"}]}]}]`)) _, _ = abi.JSON(strings.NewReader(`[{"inputs":[{"type":"tuple[]","components":[{"type":"bool","name":"foo.Bar"}]}]}]`))
} }

View file

@ -118,6 +118,7 @@ func abigen(c *cli.Context) error {
aliases = make(map[string]string) aliases = make(map[string]string)
) )
// nolint:nestif
if c.String(abiFlag.Name) != "" { if c.String(abiFlag.Name) != "" {
// Load up the ABI, optional bytecode and type name from the parameters // Load up the ABI, optional bytecode and type name from the parameters
var ( var (

View file

@ -17,9 +17,10 @@
package main package main
import ( import (
"github.com/urfave/cli/v2"
"strconv" "strconv"
"github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/external" "github.com/ethereum/go-ethereum/accounts/external"

View file

@ -140,6 +140,7 @@ func sign(ctx *cli.Context) error {
oracle *checkpointoracle.CheckpointOracle oracle *checkpointoracle.CheckpointOracle
) )
// nolint:nestif
if !ctx.IsSet(nodeURLFlag.Name) { if !ctx.IsSet(nodeURLFlag.Name) {
// Offline mode signing // Offline mode signing
offline = true offline = true

View file

@ -27,7 +27,8 @@ import (
// TestImportRaw tests clef --importraw // TestImportRaw tests clef --importraw
func TestImportRaw(t *testing.T) { func TestImportRaw(t *testing.T) {
keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) _ = os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
t.Cleanup(func() { os.Remove(keyPath) }) t.Cleanup(func() { os.Remove(keyPath) })
t.Parallel() t.Parallel()
@ -72,7 +73,8 @@ func TestImportRaw(t *testing.T) {
// TestListAccounts tests clef --list-accounts // TestListAccounts tests clef --list-accounts
func TestListAccounts(t *testing.T) { func TestListAccounts(t *testing.T) {
keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) _ = os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
t.Cleanup(func() { os.Remove(keyPath) }) t.Cleanup(func() { os.Remove(keyPath) })
t.Parallel() t.Parallel()
@ -103,7 +105,8 @@ func TestListAccounts(t *testing.T) {
// TestListWallets tests clef --list-wallets // TestListWallets tests clef --list-wallets
func TestListWallets(t *testing.T) { func TestListWallets(t *testing.T) {
keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name())) keyPath := filepath.Join(os.TempDir(), fmt.Sprintf("%v-tempkey.test", t.Name()))
os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777) _ = os.WriteFile(keyPath, []byte("0102030405060708090a0102030405060708090a0102030405060708090a0102"), 0777)
t.Cleanup(func() { os.Remove(keyPath) }) t.Cleanup(func() { os.Remove(keyPath) })
t.Parallel() t.Parallel()

View file

@ -71,6 +71,7 @@ func newCrawler(input nodeSet, disc resolver, iters ...enode.Iterator) *crawler
return c return c
} }
// nolint:gocognit
func (c *crawler) run(timeout time.Duration, nthreads int) nodeSet { func (c *crawler) run(timeout time.Duration, nthreads int) nodeSet {
var ( var (
timeoutTimer = time.NewTimer(timeout) timeoutTimer = time.NewTimer(timeout)

View file

@ -48,6 +48,7 @@ var enrdumpCommand = &cli.Command{
func enrdump(ctx *cli.Context) error { func enrdump(ctx *cli.Context) error {
var source string var source string
// nolint:nestif
if file := ctx.String(fileFlag.Name); file != "" { if file := ctx.String(fileFlag.Name); file != "" {
if ctx.NArg() != 0 { if ctx.NArg() != 0 {
return fmt.Errorf("can't dump record from command-line argument in -file mode") return fmt.Errorf("can't dump record from command-line argument in -file mode")

View file

@ -57,7 +57,7 @@ func (s *Suite) sendSuccessfulTxs(t *utesting.T) error {
return nil return nil
} }
// nolint:typecheck // nolint:typecheck, gocognit
func sendSuccessfulTx(s *Suite, tx *types.Transaction, prevTx *types.Transaction) error { func sendSuccessfulTx(s *Suite, tx *types.Transaction, prevTx *types.Transaction) error {
sendConn, recvConn, err := s.createSendAndRecvConns() sendConn, recvConn, err := s.createSendAndRecvConns()
if err != nil { if err != nil {

View file

@ -22,10 +22,11 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/urfave/cli/v2"
"math/big" "math/big"
"os" "os"
"github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/common/math"

View file

@ -20,11 +20,12 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/urfave/cli/v2"
"math/big" "math/big"
"os" "os"
"strings" "strings"
"github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"

View file

@ -21,12 +21,13 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/urfave/cli/v2"
"math/big" "math/big"
"os" "os"
"path" "path"
"strings" "strings"
"github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/consensus/misc"
@ -458,6 +459,7 @@ func saveFile(baseDir, filename string, data interface{}) error {
} }
location := path.Join(baseDir, filename) location := path.Join(baseDir, filename)
// nolint:gosec
if err = os.WriteFile(location, b, 0644); err != nil { if err = os.WriteFile(location, b, 0644); err != nil {
return NewError(ErrorIO, fmt.Errorf("failed writing output: %v", err)) return NewError(ErrorIO, fmt.Errorf("failed writing output: %v", err))
} }

View file

@ -82,6 +82,7 @@ func testReceiveHeaders(t *testing.T, ln net.Listener, gethArgs ...string) {
} }
atomic.StoreUint32(&ok, 1) atomic.StoreUint32(&ok, 1)
}}} }}}
//nolint:errcheck
go server.Serve(ln) go server.Serve(ln)
defer server.Close() defer server.Close()

View file

@ -337,8 +337,8 @@ func checkStateContent(ctx *cli.Context) error {
v := it.Value() v := it.Value()
hasher.Reset() hasher.Reset()
hasher.Write(v) _, _ = hasher.Write(v)
hasher.Read(got) _, _ = hasher.Read(got)
if !bytes.Equal(k, got) { if !bytes.Equal(k, got) {
errs++ errs++

View file

@ -284,6 +284,9 @@ func main() {
// prepare manipulates memory cache allowance and setups metric system. // prepare manipulates memory cache allowance and setups metric system.
// This function should be called before launching devp2p stack. // This function should be called before launching devp2p stack.
func prepare(ctx *cli.Context) { func prepare(ctx *cli.Context) {
const light = "light"
// If we're running a known preset, log it for convenience. // If we're running a known preset, log it for convenience.
switch { switch {
case ctx.IsSet(utils.GoerliFlag.Name): case ctx.IsSet(utils.GoerliFlag.Name):
@ -320,7 +323,7 @@ func prepare(ctx *cli.Context) {
log.Info("Starting Geth on Ethereum mainnet...") log.Info("Starting Geth on Ethereum mainnet...")
} }
// If we're a full node on mainnet without --cache specified, bump default cache allowance // If we're a full node on mainnet without --cache specified, bump default cache allowance
if ctx.String(utils.SyncModeFlag.Name) != "light" && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { if ctx.String(utils.SyncModeFlag.Name) != light && !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) {
// Make sure we're not on any supported preconfigured testnet either // Make sure we're not on any supported preconfigured testnet either
if !ctx.IsSet(utils.SepoliaFlag.Name) && if !ctx.IsSet(utils.SepoliaFlag.Name) &&
!ctx.IsSet(utils.GoerliFlag.Name) && !ctx.IsSet(utils.GoerliFlag.Name) &&
@ -328,13 +331,13 @@ func prepare(ctx *cli.Context) {
!ctx.IsSet(utils.DeveloperFlag.Name) { !ctx.IsSet(utils.DeveloperFlag.Name) {
// Nope, we're really on mainnet. Bump that cache up! // Nope, we're really on mainnet. Bump that cache up!
log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096) log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096)
ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096)) _ = ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096))
} }
} }
// If we're running a light client on any network, drop the cache to some meaningfully low amount // If we're running a light client on any network, drop the cache to some meaningfully low amount
if ctx.String(utils.SyncModeFlag.Name) == "light" && !ctx.IsSet(utils.CacheFlag.Name) { if ctx.String(utils.SyncModeFlag.Name) == light && !ctx.IsSet(utils.CacheFlag.Name) {
log.Info("Dropping default light client cache", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 128) log.Info("Dropping default light client cache", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 128)
ctx.Set(utils.CacheFlag.Name, strconv.Itoa(128)) _ = ctx.Set(utils.CacheFlag.Name, strconv.Itoa(128))
} }
// Start metrics export if enabled // Start metrics export if enabled

View file

@ -442,8 +442,8 @@ func traverseRawState(ctx *cli.Context) error {
} }
hasher.Reset() hasher.Reset()
hasher.Write(blob) _, _ = hasher.Write(blob)
hasher.Read(got) _, _ = hasher.Read(got)
if !bytes.Equal(got, node.Bytes()) { if !bytes.Equal(got, node.Bytes()) {
log.Error("Invalid trie node(account)", "hash", node.Hex(), "value", blob) log.Error("Invalid trie node(account)", "hash", node.Hex(), "value", blob)
@ -485,8 +485,8 @@ func traverseRawState(ctx *cli.Context) error {
} }
hasher.Reset() hasher.Reset()
hasher.Write(blob) _, _ = hasher.Write(blob)
hasher.Read(got) _, _ = hasher.Read(got)
if !bytes.Equal(got, node.Bytes()) { if !bytes.Equal(got, node.Bytes()) {
log.Error("Invalid trie node(storage)", "hash", node.Hex(), "value", blob) log.Error("Invalid trie node(storage)", "hash", node.Hex(), "value", blob)

View file

@ -221,7 +221,8 @@ func expandVerkle(ctx *cli.Context) error {
for i, key := range keylist { for i, key := range keylist {
log.Info("Reading key", "index", i, "key", keylist[0]) log.Info("Reading key", "index", i, "key", keylist[0])
root.Get(key, chaindb.Get)
_, _ = root.Get(key, chaindb.Get)
} }
if err := os.WriteFile("dump.dot", []byte(verkle.ToDot(root)), 0600); err != nil { if err := os.WriteFile("dump.dot", []byte(verkle.ToDot(root)), 0600); err != nil {

View file

@ -4,11 +4,11 @@ import (
"encoding/json" "encoding/json"
"os" "os"
"github.com/ethereum/go-ethereum/eth/ethconfig"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/eth/ethconfig"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/node"
) )

View file

@ -22,7 +22,6 @@ import (
"compress/gzip" "compress/gzip"
"errors" "errors"
"fmt" "fmt"
"github.com/urfave/cli/v2"
"io" "io"
"os" "os"
"os/signal" "os/signal"
@ -31,6 +30,8 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/urfave/cli/v2"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"

View file

@ -1435,6 +1435,7 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) {
setBootstrapNodes(ctx, cfg) setBootstrapNodes(ctx, cfg)
setBootstrapNodesV5(ctx, cfg) setBootstrapNodesV5(ctx, cfg)
// nolint:goconst
lightClient := ctx.String(SyncModeFlag.Name) == "light" lightClient := ctx.String(SyncModeFlag.Name) == "light"
lightServer := (ctx.Int(LightServeFlag.Name) != 0) lightServer := (ctx.Int(LightServeFlag.Name) != 0)
@ -1829,8 +1830,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light") CheckExclusive(ctx, LightServeFlag, SyncModeFlag, "light")
CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer
// nolint:goconst
if ctx.String(GCModeFlag.Name) == "archive" && ctx.Uint64(TxLookupLimitFlag.Name) != 0 { if ctx.String(GCModeFlag.Name) == "archive" && ctx.Uint64(TxLookupLimitFlag.Name) != 0 {
ctx.Set(TxLookupLimitFlag.Name, "0") _ = ctx.Set(TxLookupLimitFlag.Name, "0")
log.Warn("Disable transaction unindexing for archive node") log.Warn("Disable transaction unindexing for archive node")
} }
@ -1858,7 +1860,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
if cache := ctx.Int(CacheFlag.Name); cache > allowance { if cache := ctx.Int(CacheFlag.Name); cache > allowance {
log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance) log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance)
ctx.Set(CacheFlag.Name, strconv.Itoa(allowance)) _ = ctx.Set(CacheFlag.Name, strconv.Itoa(allowance))
} }
} }
// Ensure Go's GC ignores the database cache for trigger percentage // Ensure Go's GC ignores the database cache for trigger percentage
@ -1886,6 +1888,7 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
cfg.DatabaseFreezer = ctx.String(AncientFlag.Name) cfg.DatabaseFreezer = ctx.String(AncientFlag.Name)
} }
// nolint:goconst
if gcmode := ctx.String(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" { if gcmode := ctx.String(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" {
Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name) Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name)
} }
@ -2194,7 +2197,7 @@ func RegisterFullSyncTester(stack *node.Node, eth *eth.Ethereum, path string) {
Fatalf("Failed to decode block: %v", err) Fatalf("Failed to decode block: %v", err)
} }
ethcatalyst.RegisterFullSyncTester(stack, eth, &block) _, _ = ethcatalyst.RegisterFullSyncTester(stack, eth, &block)
log.Info("Registered full-sync tester", "number", block.NumberU64(), "hash", block.Hash()) log.Info("Registered full-sync tester", "number", block.NumberU64(), "hash", block.Hash())
} }

View file

@ -545,6 +545,7 @@ func (c *Clique) Prepare(chain consensus.ChainHeaderReader, header *types.Header
} }
c.lock.RLock() c.lock.RLock()
// nolint:nestif
if number%c.config.Epoch != 0 { if number%c.config.Epoch != 0 {
// Gather all the proposals that make sense voting on // Gather all the proposals that make sense voting on
addresses := make([]common.Address, 0, len(c.proposals)) addresses := make([]common.Address, 0, len(c.proposals))

View file

@ -389,6 +389,7 @@ func TestClique(t *testing.T) {
} }
} }
// nolint:gocognit
func (tt *cliqueTest) run(t *testing.T) { func (tt *cliqueTest) run(t *testing.T) {
// Create the account pool and generate the initial set of signers // Create the account pool and generate the initial set of signers
accounts := newTesterAccountPool() accounts := newTesterAccountPool()
@ -471,6 +472,7 @@ func (tt *cliqueTest) run(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("failed to create test chain: %v", err) t.Fatalf("failed to create test chain: %v", err)
} }
defer chain.Stop() defer chain.Stop()
for j := 0; j < len(batches)-1; j++ { for j := 0; j < len(batches)-1; j++ {

View file

@ -340,6 +340,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis
} }
// Make sure the state associated with the block is available // Make sure the state associated with the block is available
head := bc.CurrentBlock() head := bc.CurrentBlock()
// nolint:nestif
if !bc.HasState(head.Root) { if !bc.HasState(head.Root) {
// Head state is missing, before the state recovery, find out the // Head state is missing, before the state recovery, find out the
// disk layer point of snapshot(if it's enabled). Make sure the // disk layer point of snapshot(if it's enabled). Make sure the
@ -472,9 +473,9 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis
log.Warn("Rewinding chain to upgrade configuration", "err", compat) log.Warn("Rewinding chain to upgrade configuration", "err", compat)
if compat.RewindToTime > 0 { if compat.RewindToTime > 0 {
bc.SetHeadWithTimestamp(compat.RewindToTime) _ = bc.SetHeadWithTimestamp(compat.RewindToTime)
} else { } else {
bc.SetHead(compat.RewindToBlock) _ = bc.SetHead(compat.RewindToBlock)
} }
rawdb.WriteChainConfig(db, genesisHash, chainConfig) rawdb.WriteChainConfig(db, genesisHash, chainConfig)
@ -776,6 +777,7 @@ func (bc *BlockChain) SetSafe(header *types.Header) {
// requested time. If both `head` and `time` is 0, the chain is rewound to genesis. // requested time. If both `head` and `time` is 0, the chain is rewound to genesis.
// //
// The method returns the block number where the requested root cap was found. // The method returns the block number where the requested root cap was found.
// nolint:gocognit
func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Hash, repair bool) (uint64, error) { func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Hash, repair bool) (uint64, error) {
if !bc.chainmu.TryLock() { if !bc.chainmu.TryLock() {
return 0, errChainStopped return 0, errChainStopped
@ -794,6 +796,7 @@ func (bc *BlockChain) setHeadBeyondRoot(head uint64, time uint64, root common.Ha
// Rewind the blockchain, ensuring we don't end up with a stateless head // Rewind the blockchain, ensuring we don't end up with a stateless head
// block. Note, depth equality is permitted to allow using SetHead as a // block. Note, depth equality is permitted to allow using SetHead as a
// chain reparation mechanism without deleting any data! // chain reparation mechanism without deleting any data!
// nolint:nestif
if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() <= currentBlock.Number.Uint64() { if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() <= currentBlock.Number.Uint64() {
newHeadBlock := bc.GetBlock(header.Hash(), header.Number.Uint64()) newHeadBlock := bc.GetBlock(header.Hash(), header.Number.Uint64())
if newHeadBlock == nil { if newHeadBlock == nil {
@ -1194,7 +1197,7 @@ func (bc *BlockChain) Stop() {
// Ensure all live cached entries be saved into disk, so that we can skip // Ensure all live cached entries be saved into disk, so that we can skip
// cache warmup when node restarts. // cache warmup when node restarts.
if bc.cacheConfig.TrieCleanJournal != "" { if bc.cacheConfig.TrieCleanJournal != "" {
bc.triedb.SaveCache(bc.cacheConfig.TrieCleanJournal) _ = bc.triedb.SaveCache(bc.cacheConfig.TrieCleanJournal)
} }
log.Info("Blockchain stopped") log.Info("Blockchain stopped")
@ -1682,7 +1685,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
) )
if nodes > limit || imgs > 4*1024*1024 { if nodes > limit || imgs > 4*1024*1024 {
bc.triedb.Cap(limit - ethdb.IdealBatchSize) _ = bc.triedb.Cap(limit - ethdb.IdealBatchSize)
} }
// Find the next state trie we need to commit // Find the next state trie we need to commit
chosen := current - bc.cacheConfig.TriesInMemory chosen := current - bc.cacheConfig.TriesInMemory
@ -1701,7 +1704,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", flushInterval, "optimum", float64(chosen-bc.lastWrite)/float64(bc.cacheConfig.TriesInMemory)) log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", flushInterval, "optimum", float64(chosen-bc.lastWrite)/float64(bc.cacheConfig.TriesInMemory))
} }
// Flush an entire trie and restart the counters // Flush an entire trie and restart the counters
bc.triedb.Commit(header.Root, true) _ = bc.triedb.Commit(header.Root, true)
bc.lastWrite = chosen bc.lastWrite = chosen
bc.gcproc = 0 bc.gcproc = 0
} }
@ -2551,7 +2554,7 @@ func (bc *BlockChain) collectLogs(b *types.Block, removed bool) []*types.Log {
receipts = append(receipts, borReceipt) receipts = append(receipts, borReceipt)
} }
receipts.DeriveFields(bc.chainConfig, b.Hash(), b.NumberU64(), b.BaseFee(), b.Transactions()) _ = receipts.DeriveFields(bc.chainConfig, b.Hash(), b.NumberU64(), b.BaseFee(), b.Transactions())
var logs []*types.Log var logs []*types.Log
@ -2574,6 +2577,7 @@ func (bc *BlockChain) collectLogs(b *types.Block, removed bool) []*types.Log {
// potential missing transactions and post an event about them. // potential missing transactions and post an event about them.
// Note the new head block won't be processed here, callers need to handle it // Note the new head block won't be processed here, callers need to handle it
// externally. // externally.
// nolint:gocognit
func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Block) error { func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Block) error {
var ( var (
newChain types.Blocks newChain types.Blocks

View file

@ -17,7 +17,6 @@
package core package core
import ( import (
"github.com/ethereum/go-ethereum/ethdb"
"math/big" "math/big"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
@ -27,6 +26,7 @@ import (
"github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/state/snapshot"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"

View file

@ -2841,7 +2841,7 @@ func TestTransactionIndices(t *testing.T) {
for _, l := range limit { for _, l := range limit {
frdir := t.TempDir() frdir := t.TempDir()
ancientDb, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) ancientDb, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false)
rawdb.WriteAncientBlocks(ancientDb, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0)) _, _ = rawdb.WriteAncientBlocks(ancientDb, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0))
l := l l := l
@ -2867,7 +2867,7 @@ func TestTransactionIndices(t *testing.T) {
ancientDb, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), t.TempDir(), "", false) ancientDb, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), t.TempDir(), "", false)
defer ancientDb.Close() defer ancientDb.Close()
rawdb.WriteAncientBlocks(ancientDb, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0)) _, _ = rawdb.WriteAncientBlocks(ancientDb, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0))
limit = []uint64{0, 64 /* drop stale */, 32 /* shorten history */, 64 /* extend history */, 0 /* restore all */} limit = []uint64{0, 64 /* drop stale */, 32 /* shorten history */, 64 /* extend history */, 0 /* restore all */}
@ -4072,17 +4072,20 @@ func TestSetCanonical(t *testing.T) {
} }
} }
chain.SetCanonical(side[len(side)-1]) _, _ = chain.SetCanonical(side[len(side)-1])
verify(side[len(side)-1]) verify(side[len(side)-1])
// Reset the chain head to original chain // Reset the chain head to original chain
chain.SetCanonical(canon[int(DefaultCacheConfig.TriesInMemory)-1]) _, _ = chain.SetCanonical(canon[int(DefaultCacheConfig.TriesInMemory)-1])
verify(canon[int(DefaultCacheConfig.TriesInMemory)-1]) verify(canon[int(DefaultCacheConfig.TriesInMemory)-1])
} }
// TestCanonicalHashMarker tests all the canonical hash markers are updated/deleted // TestCanonicalHashMarker tests all the canonical hash markers are updated/deleted
// correctly in case reorg is called. // correctly in case reorg is called.
// nolint:gocognit
func TestCanonicalHashMarker(t *testing.T) { func TestCanonicalHashMarker(t *testing.T) {
t.Parallel()
var cases = []struct { var cases = []struct {
forkA int forkA int
forkB int forkB int
@ -4169,7 +4172,7 @@ func TestCanonicalHashMarker(t *testing.T) {
verify(forkB[len(forkB)-1]) verify(forkB[len(forkB)-1])
} else { } else {
verify(forkA[len(forkA)-1]) verify(forkA[len(forkA)-1])
chain.SetCanonical(forkB[len(forkB)-1]) _, _ = chain.SetCanonical(forkB[len(forkB)-1])
verify(forkB[len(forkB)-1]) verify(forkB[len(forkB)-1])
} }
@ -4387,7 +4390,7 @@ func TestTxIndexer(t *testing.T) {
for _, c := range cases { for _, c := range cases {
frdir := t.TempDir() frdir := t.TempDir()
db, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false) db, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "", false)
rawdb.WriteAncientBlocks(db, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0)) _, _ = rawdb.WriteAncientBlocks(db, append([]*types.Block{gspec.ToBlock()}, blocks...), append([]types.Receipts{{}}, receipts...), []types.Receipts{nil}, big.NewInt(0))
// Index the initial blocks from ancient store // Index the initial blocks from ancient store
chain, _ := NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, &c.limitA, nil) chain, _ := NewBlockChain(db, nil, gspec, nil, engine, vm.Config{}, nil, &c.limitA, nil)

View file

@ -38,7 +38,7 @@ func TestPastChainInsert(t *testing.T) {
gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges} gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges}
) )
gspec.Commit(db, trie.NewDatabase(db)) _, _ = gspec.Commit(db, trie.NewDatabase(db))
hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false }) hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false })
if err != nil { if err != nil {
@ -110,7 +110,7 @@ func TestFutureChainInsert(t *testing.T) {
gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges} gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges}
) )
gspec.Commit(db, trie.NewDatabase(db)) _, _ = gspec.Commit(db, trie.NewDatabase(db))
hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false }) hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false })
if err != nil { if err != nil {
@ -170,7 +170,7 @@ func TestOverlappingChainInsert(t *testing.T) {
gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges} gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges}
) )
gspec.Commit(db, trie.NewDatabase(db)) _, _ = gspec.Commit(db, trie.NewDatabase(db))
hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false }) hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false })
if err != nil { if err != nil {

View file

@ -318,6 +318,7 @@ func SetupGenesisBlock(db ethdb.Database, triedb *trie.Database, genesis *Genesi
return SetupGenesisBlockWithOverride(db, triedb, genesis, nil) return SetupGenesisBlockWithOverride(db, triedb, genesis, nil)
} }
// nolint:gocognit
func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, genesis *Genesis, overrides *ChainOverrides) (*params.ChainConfig, common.Hash, error) { func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, genesis *Genesis, overrides *ChainOverrides) (*params.ChainConfig, common.Hash, error) {
if genesis != nil && genesis.Config == nil { if genesis != nil && genesis.Config == nil {
return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig

View file

@ -640,6 +640,7 @@ func (hc *HeaderChain) SetHeadWithTimestamp(time uint64, updateFn UpdateHeadBloc
// setHead rewinds the local chain to a new head block or a head timestamp. // setHead rewinds the local chain to a new head block or a head timestamp.
// Everything above the new head will be deleted and the new one set. // Everything above the new head will be deleted and the new one set.
// nolint:gocognit
func (hc *HeaderChain) setHead(headBlock uint64, headTime uint64, updateFn UpdateHeadBlocksCallback, delFn DeleteBlockContentCallback) { func (hc *HeaderChain) setHead(headBlock uint64, headTime uint64, updateFn UpdateHeadBlocksCallback, delFn DeleteBlockContentCallback) {
// Sanity check that there's no attempt to undo the genesis block. This is // Sanity check that there's no attempt to undo the genesis block. This is
// a fairly synthetic case where someone enables a timestamp based fork // a fairly synthetic case where someone enables a timestamp based fork

View file

@ -79,7 +79,7 @@ func TestHeaderInsertion(t *testing.T) {
gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges} gspec = &Genesis{BaseFee: big.NewInt(params.InitialBaseFee), Config: params.AllEthashProtocolChanges}
) )
gspec.Commit(db, trie.NewDatabase(db)) _, _ = gspec.Commit(db, trie.NewDatabase(db))
hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false }) hc, err := NewHeaderChain(db, gspec.Config, ethash.NewFaker(), func() bool { return false })
if err != nil { if err != nil {

View file

@ -37,7 +37,7 @@ import (
func ReadCanonicalHash(db ethdb.Reader, number uint64) common.Hash { func ReadCanonicalHash(db ethdb.Reader, number uint64) common.Hash {
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
data, _ = reader.Ancient(ChainFreezerHashTable, number) data, _ = reader.Ancient(ChainFreezerHashTable, number)
if len(data) == 0 { if len(data) == 0 {
// Get it by hash from leveldb // Get it by hash from leveldb
@ -383,7 +383,7 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu
func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue {
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
// First try to look up the data in ancient database. Extra hash // First try to look up the data in ancient database. Extra hash
// comparison is necessary since ancient database only maintains // comparison is necessary since ancient database only maintains
// the canonical data. // the canonical data.
@ -486,7 +486,7 @@ func ReadBodyRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue
// the canonical data. // the canonical data.
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
// Check if the data is in ancients // Check if the data is in ancients
if isCanon(reader, number, hash) { if isCanon(reader, number, hash) {
data, _ = reader.Ancient(ChainFreezerBodiesTable, number) data, _ = reader.Ancient(ChainFreezerBodiesTable, number)
@ -506,7 +506,7 @@ func ReadBodyRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue
func ReadCanonicalBodyRLP(db ethdb.Reader, number uint64) rlp.RawValue { func ReadCanonicalBodyRLP(db ethdb.Reader, number uint64) rlp.RawValue {
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
data, _ = reader.Ancient(ChainFreezerBodiesTable, number) data, _ = reader.Ancient(ChainFreezerBodiesTable, number)
if len(data) > 0 { if len(data) > 0 {
return nil return nil
@ -580,7 +580,7 @@ func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) {
func ReadTdRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { func ReadTdRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue {
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
// Check if the data is in ancients // Check if the data is in ancients
if isCanon(reader, number, hash) { if isCanon(reader, number, hash) {
data, _ = reader.Ancient(ChainFreezerDifficultyTable, number) data, _ = reader.Ancient(ChainFreezerDifficultyTable, number)
@ -648,7 +648,7 @@ func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool {
func ReadReceiptsRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { func ReadReceiptsRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue {
var data []byte var data []byte
db.ReadAncients(func(reader ethdb.AncientReaderOp) error { _ = db.ReadAncients(func(reader ethdb.AncientReaderOp) error {
// Check if the data is in ancients // Check if the data is in ancients
if isCanon(reader, number, hash) { if isCanon(reader, number, hash) {
data, _ = reader.Ancient(ChainFreezerReceiptTable, number) data, _ = reader.Ancient(ChainFreezerReceiptTable, number)

View file

@ -59,8 +59,8 @@ func returnHasherToPool(h *nodeHasher) { hasherPool.Put(h) }
func (h *nodeHasher) hashData(data []byte) (n common.Hash) { func (h *nodeHasher) hashData(data []byte) (n common.Hash) {
h.sha.Reset() h.sha.Reset()
h.sha.Write(data) _, _ = h.sha.Write(data)
h.sha.Read(n[:]) _, _ = h.sha.Read(n[:])
return n return n
} }

View file

@ -127,9 +127,9 @@ func NewFreezer(datadir string, namespace string, readonly bool, maxTableSize ui
table, err := newTable(datadir, name, readMeter, writeMeter, sizeGauge, maxTableSize, disableSnappy, readonly) table, err := newTable(datadir, name, readMeter, writeMeter, sizeGauge, maxTableSize, disableSnappy, readonly)
if err != nil { if err != nil {
for _, table := range freezer.tables { for _, table := range freezer.tables {
table.Close() _ = table.Close()
} }
lock.Unlock() _ = lock.Unlock()
return nil, err return nil, err
} }
@ -163,9 +163,9 @@ func NewFreezer(datadir string, namespace string, readonly bool, maxTableSize ui
if err != nil { if err != nil {
for _, table := range freezer.tables { for _, table := range freezer.tables {
table.Close() _ = table.Close()
} }
lock.Unlock() _ = lock.Unlock()
return nil, err return nil, err
} }

View file

@ -39,9 +39,9 @@ func TestResetFreezer(t *testing.T) {
f, _ := NewResettableFreezer(t.TempDir(), "", false, 2048, freezerTestTableDef) f, _ := NewResettableFreezer(t.TempDir(), "", false, 2048, freezerTestTableDef)
defer f.Close() defer f.Close()
f.ModifyAncients(func(op ethdb.AncientWriteOp) error { _, _ = f.ModifyAncients(func(op ethdb.AncientWriteOp) error {
for _, item := range items { for _, item := range items {
op.AppendRaw("test", item.id, item.blob) _ = op.AppendRaw("test", item.id, item.blob)
} }
return nil return nil
@ -55,7 +55,7 @@ func TestResetFreezer(t *testing.T) {
} }
// Reset freezer // Reset freezer
f.Reset() _ = f.Reset()
count, _ := f.Ancients() count, _ := f.Ancients()
if count != 0 { if count != 0 {
@ -70,9 +70,9 @@ func TestResetFreezer(t *testing.T) {
} }
// Fill the freezer // Fill the freezer
f.ModifyAncients(func(op ethdb.AncientWriteOp) error { _, _ = f.ModifyAncients(func(op ethdb.AncientWriteOp) error {
for _, item := range items { for _, item := range items {
op.AppendRaw("test", item.id, item.blob) _ = op.AppendRaw("test", item.id, item.blob)
} }
return nil return nil
@ -99,19 +99,19 @@ func TestFreezerCleanup(t *testing.T) {
} }
datadir := t.TempDir() datadir := t.TempDir()
f, _ := NewResettableFreezer(datadir, "", false, 2048, freezerTestTableDef) f, _ := NewResettableFreezer(datadir, "", false, 2048, freezerTestTableDef)
f.ModifyAncients(func(op ethdb.AncientWriteOp) error { _, _ = f.ModifyAncients(func(op ethdb.AncientWriteOp) error {
for _, item := range items { for _, item := range items {
op.AppendRaw("test", item.id, item.blob) _ = op.AppendRaw("test", item.id, item.blob)
} }
return nil return nil
}) })
f.Close() _ = f.Close()
os.Rename(datadir, tmpName(datadir)) _ = os.Rename(datadir, tmpName(datadir))
// Open the freezer again, trigger cleanup operation // Open the freezer again, trigger cleanup operation
f, _ = NewResettableFreezer(datadir, "", false, 2048, freezerTestTableDef) f, _ = NewResettableFreezer(datadir, "", false, 2048, freezerTestTableDef)
f.Close() _ = f.Close()
if _, err := os.Lstat(tmpName(datadir)); !os.IsNotExist(err) { if _, err := os.Lstat(tmpName(datadir)); !os.IsNotExist(err) {
t.Fatal("Failed to cleanup leftover directory") t.Fatal("Failed to cleanup leftover directory")

View file

@ -45,7 +45,7 @@ func TestCopyFrom(t *testing.T) {
} }
for _, c := range cases { for _, c := range cases {
os.WriteFile(c.src, content, 0600) _ = os.WriteFile(c.src, content, 0600)
if err := copyFrom(c.src, c.dest, c.offset, func(f *os.File) error { if err := copyFrom(c.src, c.dest, c.offset, func(f *os.File) error {
if !c.writePrefix { if !c.writePrefix {

View file

@ -27,7 +27,7 @@ import (
func TestNodeIteratorCoverage(t *testing.T) { func TestNodeIteratorCoverage(t *testing.T) {
// Create some arbitrary test state to iterate // Create some arbitrary test state to iterate
db, sdb, root, _ := makeTestState() db, sdb, root, _ := makeTestState()
sdb.TrieDB().Commit(root, false) _ = sdb.TrieDB().Commit(root, false)
state, err := New(root, sdb, nil) state, err := New(root, sdb, nil)
if err != nil { if err != nil {

View file

@ -191,10 +191,10 @@ func (ctx *generatorContext) removeStorageBefore(account common.Hash) {
count++ count++
ctx.batch.Delete(key) _ = ctx.batch.Delete(key)
if ctx.batch.ValueSize() > ethdb.IdealBatchSize { if ctx.batch.ValueSize() > ethdb.IdealBatchSize {
ctx.batch.Write() _ = ctx.batch.Write()
ctx.batch.Reset() ctx.batch.Reset()
} }
} }
@ -230,10 +230,10 @@ func (ctx *generatorContext) removeStorageAt(account common.Hash) error {
count++ count++
ctx.batch.Delete(key) _ = ctx.batch.Delete(key)
if ctx.batch.ValueSize() > ethdb.IdealBatchSize { if ctx.batch.ValueSize() > ethdb.IdealBatchSize {
ctx.batch.Write() _ = ctx.batch.Write()
ctx.batch.Reset() ctx.batch.Reset()
} }
} }
@ -255,10 +255,10 @@ func (ctx *generatorContext) removeStorageLeft() {
for iter.Next() { for iter.Next() {
count++ count++
ctx.batch.Delete(iter.Key()) _ = ctx.batch.Delete(iter.Key())
if ctx.batch.ValueSize() > ethdb.IdealBatchSize { if ctx.batch.ValueSize() > ethdb.IdealBatchSize {
ctx.batch.Write() _ = ctx.batch.Write()
ctx.batch.Reset() ctx.batch.Reset()
} }
} }

View file

@ -400,7 +400,7 @@ func stackTrieGenerate(db ethdb.KeyValueWriter, scheme string, owner common.Hash
t := trie.NewStackTrieWithOwner(nodeWriter, owner) t := trie.NewStackTrieWithOwner(nodeWriter, owner)
for leaf := range in { for leaf := range in {
t.Update(leaf.key[:], leaf.value) _ = t.Update(leaf.key[:], leaf.value)
} }
var root common.Hash var root common.Hash

View file

@ -79,7 +79,7 @@ func TestMergeBasics(t *testing.T) {
if rand.Intn(2) == 0 { if rand.Intn(2) == 0 {
accStorage := make(map[common.Hash][]byte) accStorage := make(map[common.Hash][]byte)
value := make([]byte, 32) value := make([]byte, 32)
crand.Read(value) _, _ = crand.Read(value)
accStorage[randomHash()] = value accStorage[randomHash()] = value
storage[h] = accStorage storage[h] = accStorage
} }
@ -322,7 +322,7 @@ func BenchmarkSearchSlot(b *testing.B) {
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
value := make([]byte, 32) value := make([]byte, 32)
crand.Read(value) _, _ = crand.Read(value)
accStorage[randomHash()] = value accStorage[randomHash()] = value
storage[accountKey] = accStorage storage[accountKey] = accStorage
} }
@ -364,7 +364,7 @@ func BenchmarkFlatten(b *testing.B) {
for i := 0; i < 20; i++ { for i := 0; i < 20; i++ {
value := make([]byte, 32) value := make([]byte, 32)
crand.Read(value) _, _ = crand.Read(value)
accStorage[randomHash()] = value accStorage[randomHash()] = value
} }
@ -422,7 +422,7 @@ func BenchmarkJournal(b *testing.B) {
for i := 0; i < 200; i++ { for i := 0; i < 200; i++ {
value := make([]byte, 32) value := make([]byte, 32)
crand.Read(value) _, _ = crand.Read(value)
accStorage[randomHash()] = value accStorage[randomHash()] = value
} }

View file

@ -247,7 +247,7 @@ func (dl *diskLayer) proveRange(ctx *generatorContext, trieId *trie.ID, prefix [
if origin == nil && !diskMore { if origin == nil && !diskMore {
stackTr := trie.NewStackTrie(nil) stackTr := trie.NewStackTrie(nil)
for i, key := range keys { for i, key := range keys {
stackTr.Update(key, vals[i]) _ = stackTr.Update(key, vals[i])
} }
if gotRoot := stackTr.Hash(); gotRoot != root { if gotRoot := stackTr.Hash(); gotRoot != root {
@ -396,8 +396,8 @@ func (dl *diskLayer) generateRange(ctx *generatorContext, trieId *trie.ID, prefi
root, nodes := snapTrie.Commit(false) root, nodes := snapTrie.Commit(false)
if nodes != nil { if nodes != nil {
tdb.Update(trie.NewWithNodeSet(nodes)) _ = tdb.Update(trie.NewWithNodeSet(nodes))
tdb.Commit(root, false) _ = tdb.Commit(root, false)
} }
resolver = func(owner common.Hash, path []byte, hash common.Hash) []byte { resolver = func(owner common.Hash, path []byte, hash common.Hash) []byte {
@ -635,7 +635,7 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er
snapWipedAccountMeter.Mark(1) snapWipedAccountMeter.Mark(1)
snapAccountWriteCounter.Inc(time.Since(start).Nanoseconds()) snapAccountWriteCounter.Inc(time.Since(start).Nanoseconds())
ctx.removeStorageAt(account) _ = ctx.removeStorageAt(account)
return nil return nil
} }

View file

@ -191,7 +191,7 @@ func testIterativeStateSync(t *testing.T, count int, commit bool, bypath bool) {
// Create a random state to copy // Create a random state to copy
_, srcDb, srcRoot, srcAccounts := makeTestState() _, srcDb, srcRoot, srcAccounts := makeTestState()
if commit { if commit {
srcDb.TrieDB().Commit(srcRoot, false) _ = srcDb.TrieDB().Commit(srcRoot, false)
} }
srcTrie, _ := trie.New(trie.StateTrieID(srcRoot), srcDb.TrieDB()) srcTrie, _ := trie.New(trie.StateTrieID(srcRoot), srcDb.TrieDB())

View file

@ -354,9 +354,9 @@ func (sf *subfetcher) loop() {
sf.dups++ sf.dups++
} else { } else {
if len(task) == common.AddressLength { if len(task) == common.AddressLength {
sf.trie.GetAccount(common.BytesToAddress(task)) _, _ = sf.trie.GetAccount(common.BytesToAddress(task))
} else { } else {
sf.trie.GetStorage(sf.addr, task) _, _ = sf.trie.GetStorage(sf.addr, task)
} }
sf.seen[string(task)] = struct{}{} sf.seen[string(task)] = struct{}{}

View file

@ -89,7 +89,7 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
// precacheTransaction attempts to apply a transaction to the given state database // precacheTransaction attempts to apply a transaction to the given state database
// and uses the input parameters for its environment. The goal is not to execute // and uses the input parameters for its environment. The goal is not to execute
// the transaction successfully, rather to warm up touched data slots. // the transaction successfully, rather to warm up touched data slots.
func precacheTransaction(msg *Message, config *params.ChainConfig, gaspool *GasPool, statedb *state.StateDB, header *types.Header, evm *vm.EVM) error { func precacheTransaction(msg *Message, _ *params.ChainConfig, gaspool *GasPool, statedb *state.StateDB, _ *types.Header, evm *vm.EVM) error {
// Update the evm with the new transaction context. // Update the evm with the new transaction context.
evm.Reset(NewEVMTxContext(msg), statedb) evm.Reset(NewEVMTxContext(msg), statedb)
// Add addresses to access list if applicable // Add addresses to access list if applicable

View file

@ -82,6 +82,7 @@ func IntrinsicGas(data []byte, accessList types.AccessList, isContractCreation b
dataLen := uint64(len(data)) dataLen := uint64(len(data))
// Bump the required gas by the amount of transactional data // Bump the required gas by the amount of transactional data
// nolint:nestif
if dataLen > 0 { if dataLen > 0 {
// Zero and non-zero bytes are priced differently // Zero and non-zero bytes are priced differently
var nz uint64 var nz uint64

View file

@ -2020,7 +2020,7 @@ func TestIssue23496(t *testing.T) {
t.Fatalf("Failed to import canonical chain start: %v", err) t.Fatalf("Failed to import canonical chain start: %v", err)
} }
chain.StateCache().TrieDB().Commit(blocks[2].Root(), false) _ = chain.StateCache().TrieDB().Commit(blocks[2].Root(), false)
// Insert the remaining blocks // Insert the remaining blocks
if _, err := chain.InsertChain(blocks[3:]); err != nil { if _, err := chain.InsertChain(blocks[3:]); err != nil {

View file

@ -747,6 +747,7 @@ func (pool *TxPool) local() map[common.Address]types.Transactions {
// rules, but does not check state-dependent validation such as sufficient balance. // rules, but does not check state-dependent validation such as sufficient balance.
// This check is meant as an early check which only needs to be performed once, // This check is meant as an early check which only needs to be performed once,
// and does not require the pool mutex to be held. // and does not require the pool mutex to be held.
// nolint:gocognit
func (pool *TxPool) validateTxBasics(tx *types.Transaction, local bool) error { func (pool *TxPool) validateTxBasics(tx *types.Transaction, local bool) error {
// Accept only legacy transactions until EIP-2718/2930 activates. // Accept only legacy transactions until EIP-2718/2930 activates.
if !pool.eip2718.Load() && tx.Type() != types.LegacyTxType { if !pool.eip2718.Load() && tx.Type() != types.LegacyTxType {
@ -852,7 +853,7 @@ func (pool *TxPool) validateTxBasics(tx *types.Transaction, local bool) error {
// validateTx checks whether a transaction is valid according to the consensus // validateTx checks whether a transaction is valid according to the consensus
// rules and adheres to some heuristic limits of the local node (price and size). // rules and adheres to some heuristic limits of the local node (price and size).
func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { func (pool *TxPool) validateTx(tx *types.Transaction, _ bool) error {
// Signature has been checked already, this cannot error. // Signature has been checked already, this cannot error.
from, _ := types.Sender(pool.signer, tx) from, _ := types.Sender(pool.signer, tx)
// Ensure the transaction adheres to nonce ordering // Ensure the transaction adheres to nonce ordering
@ -1213,7 +1214,6 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error {
var ( var (
errs []error errs []error
news = make([]*types.Transaction, 0, len(txs)) news = make([]*types.Transaction, 0, len(txs))
err error
hash common.Hash hash common.Hash
) )
@ -1230,22 +1230,22 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error {
continue continue
} }
if pool.config.AllowUnprotectedTxs { // Exclude transactions with basic errors, e.g. invalid signatures and
pool.signer = types.NewFakeSigner(tx.ChainId()) // insufficient intrinsic gas as soon as possible and cache senders
} // in transactions before obtaining lock
// Exclude transactions with invalid signatures as soon as if err := pool.validateTxBasics(tx, local); err != nil {
// possible and cache senders in transactions before errs = append(errs, ErrAlreadyKnown)
// obtaining lock
_, err = types.Sender(pool.signer, tx)
if err != nil {
errs = append(errs, ErrInvalidSender)
invalidTxMeter.Mark(1) invalidTxMeter.Mark(1)
continue continue
} }
if pool.config.AllowUnprotectedTxs {
pool.signer = types.NewFakeSigner(tx.ChainId())
}
// Accumulate all unknown transactions for deeper processing // Accumulate all unknown transactions for deeper processing
news = append(news, tx) news = append(news, tx)
} }

View file

@ -81,7 +81,7 @@ type testBlockChain struct {
chainHeadFeed *event.Feed chainHeadFeed *event.Feed
} }
func newTestBlockChain(gasLimit uint64, statedb *state.StateDB, chainHeadFeed *event.Feed) *testBlockChain { func newTestBlockChain(gasLimit uint64, statedb *state.StateDB, _ *event.Feed) *testBlockChain {
bc := testBlockChain{statedb: statedb, chainHeadFeed: new(event.Feed)} bc := testBlockChain{statedb: statedb, chainHeadFeed: new(event.Feed)}
bc.gasLimit.Store(gasLimit) bc.gasLimit.Store(gasLimit)
@ -145,7 +145,7 @@ func setupPool() (*TxPool, *ecdsa.PrivateKey) {
return setupPoolWithConfig(params.TestChainConfig, testTxPoolConfig, txPoolGasLimit) return setupPoolWithConfig(params.TestChainConfig, testTxPoolConfig, txPoolGasLimit)
} }
func setupPoolWithConfig(config *params.ChainConfig, txPoolConfig Config, gasLimit uint64, options ...func(pool *TxPool)) (*TxPool, *ecdsa.PrivateKey) { func setupPoolWithConfig(config *params.ChainConfig, txPoolConfig Config, _ uint64, options ...func(pool *TxPool)) (*TxPool, *ecdsa.PrivateKey) {
statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil)
blockchain := newTestBlockChain(10000000, statedb, new(event.Feed)) blockchain := newTestBlockChain(10000000, statedb, new(event.Feed))
@ -775,6 +775,7 @@ func TestDropping(t *testing.T) {
// Tests that if a transaction is dropped from the current pending pool (e.g. out // Tests that if a transaction is dropped from the current pending pool (e.g. out
// of fund), all consecutive (still valid, but not executable) transactions are // of fund), all consecutive (still valid, but not executable) transactions are
// postponed back into the future queue to prevent broadcasting them. // postponed back into the future queue to prevent broadcasting them.
// nolint:gocognit
func TestPostponing(t *testing.T) { func TestPostponing(t *testing.T) {
t.Parallel() t.Parallel()
@ -1178,7 +1179,10 @@ func TestQueueTimeLimitingNoLocals(t *testing.T) {
testQueueTimeLimiting(t, true) testQueueTimeLimiting(t, true)
} }
// nolint:gocognit
func testQueueTimeLimiting(t *testing.T, nolocals bool) { func testQueueTimeLimiting(t *testing.T, nolocals bool) {
t.Helper()
// Reduce the eviction interval to a testable amount // Reduce the eviction interval to a testable amount
defer func(old time.Duration) { evictionInterval = old }(evictionInterval) defer func(old time.Duration) { evictionInterval = old }(evictionInterval)
evictionInterval = time.Millisecond * 100 evictionInterval = time.Millisecond * 100

View file

@ -52,5 +52,5 @@ func (s Withdrawals) Len() int { return len(s) }
// because we assume that *Withdrawal will only ever contain valid withdrawals that were either // because we assume that *Withdrawal will only ever contain valid withdrawals that were either
// constructed by decoding or via public API in this package. // constructed by decoding or via public API in this package.
func (s Withdrawals) EncodeIndex(i int, w *bytes.Buffer) { func (s Withdrawals) EncodeIndex(i int, w *bytes.Buffer) {
rlp.Encode(w, s[i]) _ = rlp.Encode(w, s[i])
} }

View file

@ -262,7 +262,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
return nil, err return nil, err
} }
ethereum.engine.VerifyHeader(ethereum.blockchain, ethereum.blockchain.CurrentHeader(), true) // TODO think on it _ = ethereum.engine.VerifyHeader(ethereum.blockchain, ethereum.blockchain.CurrentHeader(), true) // TODO think on it
// BOR changes // BOR changes
ethereum.APIBackend.gpo.ProcessCache() ethereum.APIBackend.gpo.ProcessCache()
@ -303,7 +303,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
} }
ethereum.miner = miner.New(ethereum, &config.Miner, ethereum.blockchain.Config(), ethereum.EventMux(), ethereum.engine, ethereum.isLocalBlock) ethereum.miner = miner.New(ethereum, &config.Miner, ethereum.blockchain.Config(), ethereum.EventMux(), ethereum.engine, ethereum.isLocalBlock)
ethereum.miner.SetExtra(makeExtraData(config.Miner.ExtraData)) _ = ethereum.miner.SetExtra(makeExtraData(config.Miner.ExtraData))
// Setup DNS discovery iterators. // Setup DNS discovery iterators.
dnsclient := dnsdisc.NewClient(dnsdisc.Config{}) dnsclient := dnsdisc.NewClient(dnsdisc.Config{})

View file

@ -206,6 +206,7 @@ func (api *ConsensusAPI) verifyPayloadAttributes(attr *engine.PayloadAttributes)
return nil return nil
} }
// nolint:gocognit
func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
api.forkchoiceLock.Lock() api.forkchoiceLock.Lock()
defer api.forkchoiceLock.Unlock() defer api.forkchoiceLock.Unlock()
@ -738,6 +739,7 @@ func (api *ConsensusAPI) heartbeat() {
// If there have been no updates for the past while, warn the user // If there have been no updates for the past while, warn the user
// that the beacon client is probably offline // that the beacon client is probably offline
// nolint:nestif
if api.eth.BlockChain().Config().TerminalTotalDifficultyPassed || api.eth.Merger().TDDReached() { if api.eth.BlockChain().Config().TerminalTotalDifficultyPassed || api.eth.Merger().TDDReached() {
if time.Since(lastForkchoiceUpdate) <= beaconUpdateConsensusTimeout || time.Since(lastNewPayloadUpdate) <= beaconUpdateConsensusTimeout { if time.Since(lastForkchoiceUpdate) <= beaconUpdateConsensusTimeout || time.Since(lastNewPayloadUpdate) <= beaconUpdateConsensusTimeout {
offlineLogged = time.Time{} offlineLogged = time.Time{}

View file

@ -315,6 +315,7 @@ func TestInvalidPayloadTimestamp(t *testing.T) {
} }
} }
// nolint:goconst
func TestEth2NewBlock(t *testing.T) { func TestEth2NewBlock(t *testing.T) {
t.Skip("ETH2 in Bor") t.Skip("ETH2 in Bor")
@ -539,7 +540,10 @@ func TestFullAPI(t *testing.T) {
setupBlocks(t, ethservice, 10, parent, callback, nil) setupBlocks(t, ethservice, 10, parent, callback, nil)
} }
// nolint:unparam,prealloc
func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.Header, callback func(parent *types.Header), withdrawals [][]*types.Withdrawal) []*types.Header { func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.Header, callback func(parent *types.Header), withdrawals [][]*types.Withdrawal) []*types.Header {
t.Helper()
api := NewConsensusAPI(ethservice) api := NewConsensusAPI(ethservice)
var blocks []*types.Header var blocks []*types.Header
@ -925,6 +929,7 @@ func TestTrickRemoteBlockCache(t *testing.T) {
setupBlocks(t, ethserviceA, 10, commonAncestor, func(parent *types.Header) {}, nil) setupBlocks(t, ethserviceA, 10, commonAncestor, func(parent *types.Header) {}, nil)
commonAncestor = ethserviceA.BlockChain().CurrentBlock() commonAncestor = ethserviceA.BlockChain().CurrentBlock()
// nolint:prealloc
var invalidChain []*engine.ExecutableData var invalidChain []*engine.ExecutableData
// create a valid payload (P1) // create a valid payload (P1)
//payload1 := getNewPayload(t, apiA, commonAncestor) //payload1 := getNewPayload(t, apiA, commonAncestor)
@ -1445,7 +1450,7 @@ func setupBodies(t *testing.T) (*node.Node, *eth.Ethereum, []*types.Block) {
statedb, _ := ethservice.BlockChain().StateAt(parent.Root) statedb, _ := ethservice.BlockChain().StateAt(parent.Root)
nonce := statedb.GetNonce(testAddr) nonce := statedb.GetNonce(testAddr)
tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey) tx, _ := types.SignTx(types.NewContractCreation(nonce, new(big.Int), 1000000, big.NewInt(2*params.InitialBaseFee), logCode), types.LatestSigner(ethservice.BlockChain().Config()), testKey)
ethservice.TxPool().AddLocal(tx) _ = ethservice.TxPool().AddLocal(tx)
} }
withdrawals := make([][]*types.Withdrawal, 10) withdrawals := make([][]*types.Withdrawal, 10)
@ -1455,7 +1460,7 @@ func setupBodies(t *testing.T) (*node.Node, *eth.Ethereum, []*types.Block) {
for i := 2; i < len(withdrawals); i++ { for i := 2; i < len(withdrawals); i++ {
addr := make([]byte, 20) addr := make([]byte, 20)
crand.Read(addr) _, _ = crand.Read(addr)
withdrawals[i] = []*types.Withdrawal{ withdrawals[i] = []*types.Withdrawal{
{Index: rand.Uint64(), Validator: rand.Uint64(), Amount: rand.Uint64(), Address: common.BytesToAddress(addr)}, {Index: rand.Uint64(), Validator: rand.Uint64(), Amount: rand.Uint64(), Address: common.BytesToAddress(addr)},
@ -1473,7 +1478,8 @@ func setupBodies(t *testing.T) (*node.Node, *eth.Ethereum, []*types.Block) {
} }
func allHashes(blocks []*types.Block) []common.Hash { func allHashes(blocks []*types.Block) []common.Hash {
var hashes []common.Hash hashes := make([]common.Hash, 0, len(blocks))
for _, b := range blocks { for _, b := range blocks {
hashes = append(hashes, b.Hash()) hashes = append(hashes, b.Hash())
} }
@ -1481,7 +1487,8 @@ func allHashes(blocks []*types.Block) []common.Hash {
return hashes return hashes
} }
func allBodies(blocks []*types.Block) []*types.Body { func allBodies(blocks []*types.Block) []*types.Body {
var bodies []*types.Body bodies := make([]*types.Body, 0, len(blocks))
for _, b := range blocks { for _, b := range blocks {
bodies = append(bodies, b.Body()) bodies = append(bodies, b.Body())
} }

View file

@ -313,6 +313,8 @@ func (d *Downloader) fetchBeaconHeaders(from uint64) error {
// If the pivot became stale (older than 2*64-8 (bit of wiggle room)), // If the pivot became stale (older than 2*64-8 (bit of wiggle room)),
// move it ahead to HEAD-64 // move it ahead to HEAD-64
d.pivotLock.Lock() d.pivotLock.Lock()
// nolint:nestif
if d.pivotHeader != nil { if d.pivotHeader != nil {
if head.Number.Uint64() > d.pivotHeader.Number.Uint64()+2*uint64(fsMinFullBlocks)-8 { if head.Number.Uint64() > d.pivotHeader.Number.Uint64()+2*uint64(fsMinFullBlocks)-8 {
// Retrieve the next pivot header, either from skeleton chain // Retrieve the next pivot header, either from skeleton chain

View file

@ -1992,6 +1992,7 @@ func (d *Downloader) DeliverSnapPacket(peer *snap.Peer, packet snap.Packet) erro
// readHeaderRange returns a list of headers, using the given last header as the base, // readHeaderRange returns a list of headers, using the given last header as the base,
// and going backwards towards genesis. This method assumes that the caller already has // and going backwards towards genesis. This method assumes that the caller already has
// placed a reasonable cap on count. // placed a reasonable cap on count.
// nolint:prealloc
func (d *Downloader) readHeaderRange(last *types.Header, count int) []*types.Header { func (d *Downloader) readHeaderRange(last *types.Header, count int) []*types.Header {
var ( var (
current = last current = last

View file

@ -63,7 +63,9 @@ func newTester(t *testing.T) *downloadTester {
} }
// newTester creates a new downloader test mocker. // newTester creates a new downloader test mocker.
func newTesterWithNotification(t *testing.T, success func()) *downloadTester { func newTesterWithNotification(t *testing.T, _ func()) *downloadTester {
t.Helper()
freezer := t.TempDir() freezer := t.TempDir()
db, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), freezer, "", false) db, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), freezer, "", false)
@ -1928,7 +1930,7 @@ func testBeaconSync(t *testing.T, protocol uint, mode SyncMode) {
// Build the local chain segment if it's required // Build the local chain segment if it's required
if c.local > 0 { if c.local > 0 {
tester.chain.InsertChain(chain.blocks[1 : c.local+1]) _, _ = tester.chain.InsertChain(chain.blocks[1 : c.local+1])
} }
if err := tester.downloader.BeaconSync(mode, chain.blocks[len(chain.blocks)-1].Header(), nil); err != nil { if err := tester.downloader.BeaconSync(mode, chain.blocks[len(chain.blocks)-1].Header(), nil); err != nil {

View file

@ -380,15 +380,16 @@ func TestSkeletonSyncInit(t *testing.T) {
skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller()) skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller())
skeleton.syncStarting = func() { close(wait) } skeleton.syncStarting = func() { close(wait) }
skeleton.Sync(tt.head, nil, true) _ = skeleton.Sync(tt.head, nil, true)
<-wait <-wait
skeleton.Terminate()
_ = skeleton.Terminate()
// Ensure the correct resulting sync status // Ensure the correct resulting sync status
var progress skeletonProgress var progress skeletonProgress
json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) _ = json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress)
if len(progress.Subchains) != len(tt.newstate) { if len(progress.Subchains) != len(tt.newstate) {
t.Errorf("test %d: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.newstate)) t.Errorf("test %d: subchain count mismatch: have %d, want %d", i, len(progress.Subchains), len(tt.newstate))
@ -498,7 +499,7 @@ func TestSkeletonSyncExtend(t *testing.T) {
skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller()) skeleton := newSkeleton(db, newPeerSet(), nil, newHookedBackfiller())
skeleton.syncStarting = func() { close(wait) } skeleton.syncStarting = func() { close(wait) }
skeleton.Sync(tt.head, nil, true) _ = skeleton.Sync(tt.head, nil, true)
<-wait <-wait
@ -544,7 +545,8 @@ func TestSkeletonSyncRetrievals(t *testing.T) {
}) })
} }
// Some tests require a forking side chain to trigger cornercases. // Some tests require a forking side chain to trigger cornercases.
var sidechain []*types.Header sidechain := make([]*types.Header, 0, len(chain))
for i := 0; i < len(chain)/2; i++ { // Fork at block #5000 for i := 0; i < len(chain)/2; i++ { // Fork at block #5000
sidechain = append(sidechain, chain[i]) sidechain = append(sidechain, chain[i])
} }
@ -853,7 +855,7 @@ func TestSkeletonSyncRetrievals(t *testing.T) {
filler = &hookedBackfiller{ filler = &hookedBackfiller{
resumeHook: func() { resumeHook: func() {
var progress skeletonProgress var progress skeletonProgress
json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress) _ = json.Unmarshal(rawdb.ReadSkeletonSyncStatus(db), &progress)
for progress.Subchains[0].Tail < progress.Subchains[0].Head { for progress.Subchains[0].Tail < progress.Subchains[0].Head {
header := rawdb.ReadSkeletonHeader(db, progress.Subchains[0].Tail) header := rawdb.ReadSkeletonHeader(db, progress.Subchains[0].Tail)
@ -882,7 +884,7 @@ func TestSkeletonSyncRetrievals(t *testing.T) {
} }
// Create a skeleton sync and run a cycle // Create a skeleton sync and run a cycle
skeleton := newSkeleton(db, peerset, drop, filler) skeleton := newSkeleton(db, peerset, drop, filler)
skeleton.Sync(tt.head, nil, true) _ = skeleton.Sync(tt.head, nil, true)
var progress skeletonProgress var progress skeletonProgress
// Wait a bit (bleah) for the initial sync loop to go to idle. This might // Wait a bit (bleah) for the initial sync loop to go to idle. This might
@ -943,7 +945,7 @@ func TestSkeletonSyncRetrievals(t *testing.T) {
} }
// Apply the post-init events if there's any // Apply the post-init events if there's any
if tt.newHead != nil { if tt.newHead != nil {
skeleton.Sync(tt.newHead, nil, true) _ = skeleton.Sync(tt.newHead, nil, true)
} }
if tt.newPeer != nil { if tt.newPeer != nil {

View file

@ -253,6 +253,7 @@ type Config struct {
// CreateConsensusEngine creates a consensus engine for the given chain configuration. // CreateConsensusEngine creates a consensus engine for the given chain configuration.
func CreateConsensusEngine(stack *node.Node, chainConfig *params.ChainConfig, ethConfig *Config, ethashConfig *ethash.Config, cliqueConfig *params.CliqueConfig, notify []string, noverify bool, db ethdb.Database, blockchainAPI *ethapi.BlockChainAPI) consensus.Engine { func CreateConsensusEngine(stack *node.Node, chainConfig *params.ChainConfig, ethConfig *Config, ethashConfig *ethash.Config, cliqueConfig *params.CliqueConfig, notify []string, noverify bool, db ethdb.Database, blockchainAPI *ethapi.BlockChainAPI) consensus.Engine {
var engine consensus.Engine var engine consensus.Engine
// nolint:nestif
if cliqueConfig != nil { if cliqueConfig != nil {
// If proof-of-authority is requested, set it up // If proof-of-authority is requested, set it up
engine = clique.New(cliqueConfig, db) engine = clique.New(cliqueConfig, db)

View file

@ -171,9 +171,9 @@ func (api *FilterAPI) NewPendingTransactions(ctx context.Context, fullTx *bool)
for _, tx := range txs { for _, tx := range txs {
if fullTx != nil && *fullTx { if fullTx != nil && *fullTx {
rpcTx := ethapi.NewRPCPendingTransaction(tx, latest, chainConfig) rpcTx := ethapi.NewRPCPendingTransaction(tx, latest, chainConfig)
notifier.Notify(rpcSub.ID, rpcTx) _ = notifier.Notify(rpcSub.ID, rpcTx)
} else { } else {
notifier.Notify(rpcSub.ID, tx.Hash()) _ = notifier.Notify(rpcSub.ID, tx.Hash())
} }
} }
case <-rpcSub.Err(): case <-rpcSub.Err():

View file

@ -77,6 +77,7 @@ func (b *testBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumbe
num uint64 num uint64
) )
// nolint:exhaustive
switch blockNr { switch blockNr {
case rpc.LatestBlockNumber: case rpc.LatestBlockNumber:
hash = rawdb.ReadHeadBlockHash(b.db) hash = rawdb.ReadHeadBlockHash(b.db)
@ -221,7 +222,7 @@ func (b *testBackend) ServiceFilter(ctx context.Context, session *bloombits.Matc
}() }()
} }
func newTestFilterSystem(t testing.TB, db ethdb.Database, cfg Config) (*testBackend, *FilterSystem) { func newTestFilterSystem(_ testing.TB, db ethdb.Database, cfg Config) (*testBackend, *FilterSystem) {
backend := &testBackend{db: db} backend := &testBackend{db: db}
sys := NewFilterSystem(backend, cfg) sys := NewFilterSystem(backend, cfg)
@ -807,7 +808,7 @@ func TestPendingLogsSubscription(t *testing.T) {
<-testCases[i].sub.Err() <-testCases[i].sub.Err()
} }
} }
// nolint:gocognit
func TestLightFilterLogs(t *testing.T) { func TestLightFilterLogs(t *testing.T) {
t.Parallel() t.Parallel()

View file

@ -234,6 +234,7 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, reqEnd rpc.BlockNum
// //
// Note: baseFee includes the next block after the newest of the returned range, because this // Note: baseFee includes the next block after the newest of the returned range, because this
// value can be derived from the newest block. // value can be derived from the newest block.
// nolint:gocognit
func (oracle *Oracle) FeeHistory(ctx context.Context, blocks uint64, unresolvedLastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) { func (oracle *Oracle) FeeHistory(ctx context.Context, blocks uint64, unresolvedLastBlock rpc.BlockNumber, rewardPercentiles []float64) (*big.Int, [][]*big.Int, []*big.Int, []float64, error) {
if blocks < 1 { if blocks < 1 {
return common.Big0, nil, nil, nil, nil // returning with no data and no error means there are no retrievable blocks return common.Big0, nil, nil, nil, nil // returning with no data and no error means there are no retrievable blocks

View file

@ -210,6 +210,7 @@ func newHandler(config *handlerConfig) (*handler, error) {
} }
// Construct the downloader (long sync) // Construct the downloader (long sync)
h.downloader = downloader.New(h.checkpointNumber, config.Database, h.eventMux, h.chain, nil, h.removePeer, success, config.checker) h.downloader = downloader.New(h.checkpointNumber, config.Database, h.eventMux, h.chain, nil, h.removePeer, success, config.checker)
// nolint:nestif
if ttd := h.chain.Config().TerminalTotalDifficulty; ttd != nil { if ttd := h.chain.Config().TerminalTotalDifficulty; ttd != nil {
if h.chain.Config().TerminalTotalDifficultyPassed { if h.chain.Config().TerminalTotalDifficultyPassed {
log.Info("Chain post-merge, sync via beacon client") log.Info("Chain post-merge, sync via beacon client")

View file

@ -114,7 +114,7 @@ func newTestBackendWithGenerator(blocks int, shanghai bool, generator func(int,
} }
for _, block := range bs { for _, block := range bs {
chain.StateCache().TrieDB().Commit(block.Root(), false) _ = chain.StateCache().TrieDB().Commit(block.Root(), false)
} }
txconfig := txpool.DefaultConfig txconfig := txpool.DefaultConfig

View file

@ -383,6 +383,7 @@ func (*GetReceiptsPacket) Kind() byte { return GetReceiptsMsg }
func (*ReceiptsPacket) Name() string { return "Receipts" } func (*ReceiptsPacket) Name() string { return "Receipts" }
func (*ReceiptsPacket) Kind() byte { return ReceiptsMsg } func (*ReceiptsPacket) Kind() byte { return ReceiptsMsg }
// nolint:goconst
func (*NewPooledTransactionHashesPacket66) Name() string { return "NewPooledTransactionHashes" } func (*NewPooledTransactionHashesPacket66) Name() string { return "NewPooledTransactionHashes" }
func (*NewPooledTransactionHashesPacket66) Kind() byte { return NewPooledTransactionHashesMsg } func (*NewPooledTransactionHashesPacket66) Kind() byte { return NewPooledTransactionHashesMsg }

View file

@ -431,6 +431,7 @@ func ServiceGetStorageRangesQuery(chain *core.BlockChain, req *GetStorageRangesP
// Generate the Merkle proofs for the first and last storage slot, but // Generate the Merkle proofs for the first and last storage slot, but
// only if the response was capped. If the entire storage trie included // only if the response was capped. If the entire storage trie included
// in the response, no need for any proofs. // in the response, no need for any proofs.
// nolint:nestif
if origin != (common.Hash{}) || (abort && len(storage) > 0) { if origin != (common.Hash{}) || (abort && len(storage) > 0) {
// Request started at a non-zero hash or was capped prematurely, add // Request started at a non-zero hash or was capped prematurely, add
// the endpoint Merkle proofs // the endpoint Merkle proofs

View file

@ -24,6 +24,7 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
) )
// nolint:prealloc
func hexToNibbles(s string) []byte { func hexToNibbles(s string) []byte {
if len(s) >= 2 && s[0] == '0' && s[1] == 'x' { if len(s) >= 2 && s[0] == '0' && s[1] == 'x' {
s = s[2:] s = s[2:]
@ -38,6 +39,7 @@ func hexToNibbles(s string) []byte {
return common.Hex2Bytes(string(s2)) return common.Hex2Bytes(string(s2))
} }
// nolint:prealloc
func TestRequestSorting(t *testing.T) { func TestRequestSorting(t *testing.T) {
t.Parallel() t.Parallel()

View file

@ -21,7 +21,6 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"golang.org/x/crypto/sha3"
gomath "math" gomath "math"
"math/big" "math/big"
"math/rand" "math/rand"
@ -30,6 +29,8 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"golang.org/x/crypto/sha3"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"
@ -3351,7 +3352,8 @@ func (t *healRequestSort) Merge() []TrieNodePathSet {
// sortByAccountPath takes hashes and paths, and sorts them. After that, it generates // sortByAccountPath takes hashes and paths, and sorts them. After that, it generates
// the TrieNodePaths and merges paths which belongs to the same account path. // the TrieNodePaths and merges paths which belongs to the same account path.
func sortByAccountPath(paths []string, hashes []common.Hash) ([]string, []common.Hash, []trie.SyncPath, []TrieNodePathSet) { func sortByAccountPath(paths []string, hashes []common.Hash) ([]string, []common.Hash, []trie.SyncPath, []TrieNodePathSet) {
var syncPaths []trie.SyncPath syncPaths := make([]trie.SyncPath, 0, len(paths))
for _, path := range paths { for _, path := range paths {
syncPaths = append(syncPaths, trie.NewSyncPath([]byte(path))) syncPaths = append(syncPaths, trie.NewSyncPath([]byte(path)))
} }

View file

@ -1529,9 +1529,10 @@ func makeAccountTrieNoStorage(n int) (string, *trie.Trie, entrySlice) {
var ( var (
db = trie.NewDatabase(rawdb.NewMemoryDatabase()) db = trie.NewDatabase(rawdb.NewMemoryDatabase())
accTrie = trie.NewEmpty(db) accTrie = trie.NewEmpty(db)
entries entrySlice
) )
entries := make(entrySlice, uint64(n))
for i := uint64(1); i <= uint64(n); i++ { for i := uint64(1); i <= uint64(n); i++ {
value, _ := rlp.EncodeToBytes(&types.StateAccount{ value, _ := rlp.EncodeToBytes(&types.StateAccount{
Nonce: i, Nonce: i,
@ -1549,7 +1550,7 @@ func makeAccountTrieNoStorage(n int) (string, *trie.Trie, entrySlice) {
// Commit the state changes into db and re-create the trie // Commit the state changes into db and re-create the trie
// for accessing later. // for accessing later.
root, nodes := accTrie.Commit(false) root, nodes := accTrie.Commit(false)
db.Update(trie.NewWithNodeSet(nodes)) _ = db.Update(trie.NewWithNodeSet(nodes))
accTrie, _ = trie.New(trie.StateTrieID(root), db) accTrie, _ = trie.New(trie.StateTrieID(root), db)
@ -1614,7 +1615,7 @@ func makeBoundaryAccountTrie(n int) (string, *trie.Trie, entrySlice) {
// Commit the state changes into db and re-create the trie // Commit the state changes into db and re-create the trie
// for accessing later. // for accessing later.
root, nodes := accTrie.Commit(false) root, nodes := accTrie.Commit(false)
db.Update(trie.NewWithNodeSet(nodes)) _ = db.Update(trie.NewWithNodeSet(nodes))
accTrie, _ = trie.New(trie.StateTrieID(root), db) accTrie, _ = trie.New(trie.StateTrieID(root), db)
@ -1643,7 +1644,7 @@ func makeAccountTrieWithStorageWithUniqueStorage(accounts, slots int, code bool)
} }
// Create a storage trie // Create a storage trie
stRoot, stNodes, stEntries := makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), i, db) stRoot, stNodes, stEntries := makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), i, db)
nodes.Merge(stNodes) _ = nodes.Merge(stNodes)
value, _ := rlp.EncodeToBytes(&types.StateAccount{ value, _ := rlp.EncodeToBytes(&types.StateAccount{
Nonce: i, Nonce: i,
@ -1662,10 +1663,10 @@ func makeAccountTrieWithStorageWithUniqueStorage(accounts, slots int, code bool)
// Commit account trie // Commit account trie
root, set := accTrie.Commit(true) root, set := accTrie.Commit(true)
nodes.Merge(set) _ = nodes.Merge(set)
// Commit gathered dirty nodes into database // Commit gathered dirty nodes into database
db.Update(nodes) _ = db.Update(nodes)
// Re-create tries with new root // Re-create tries with new root
accTrie, _ = trie.New(trie.StateTrieID(root), db) accTrie, _ = trie.New(trie.StateTrieID(root), db)
@ -1712,7 +1713,7 @@ func makeAccountTrieWithStorage(accounts, slots int, code, boundary bool) (strin
stRoot, stNodes, stEntries = makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), 0, db) stRoot, stNodes, stEntries = makeStorageTrieWithSeed(common.BytesToHash(key), uint64(slots), 0, db)
} }
nodes.Merge(stNodes) _ = nodes.Merge(stNodes)
value, _ := rlp.EncodeToBytes(&types.StateAccount{ value, _ := rlp.EncodeToBytes(&types.StateAccount{
Nonce: i, Nonce: i,
@ -1732,10 +1733,10 @@ func makeAccountTrieWithStorage(accounts, slots int, code, boundary bool) (strin
// Commit account trie // Commit account trie
root, set := accTrie.Commit(true) root, set := accTrie.Commit(true)
nodes.Merge(set) _ = nodes.Merge(set)
// Commit gathered dirty nodes into database // Commit gathered dirty nodes into database
db.Update(nodes) _ = db.Update(nodes)
// Re-create tries with new root // Re-create tries with new root
accTrie, err := trie.New(trie.StateTrieID(root), db) accTrie, err := trie.New(trie.StateTrieID(root), db)

View file

@ -57,6 +57,8 @@ var noopReleaser = tracers.StateReleaseFunc(func() {})
// - preferDisk: this arg can be used by the caller to signal that even though the 'base' is // - preferDisk: this arg can be used by the caller to signal that even though the 'base' is
// provided, it would be preferable to start from a fresh state, if we have it // provided, it would be preferable to start from a fresh state, if we have it
// on disk. // on disk.
//
// nolint:gocognit
func (eth *Ethereum) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, readOnly bool, preferDisk bool) (statedb *state.StateDB, release tracers.StateReleaseFunc, err error) { func (eth *Ethereum) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, readOnly bool, preferDisk bool) (statedb *state.StateDB, release tracers.StateReleaseFunc, err error) {
var ( var (
current *types.Block current *types.Block

View file

@ -307,7 +307,7 @@ func (api *API) TraceChain(ctx context.Context, start, end rpc.BlockNumber, conf
go func() { go func() {
for result := range resCh { for result := range resCh {
notifier.Notify(sub.ID, result) _ = notifier.Notify(sub.ID, result)
} }
}() }()
@ -319,6 +319,7 @@ func (api *API) TraceChain(ctx context.Context, start, end rpc.BlockNumber, conf
// the end block but excludes the start one. The return value will be one item per // the end block but excludes the start one. The return value will be one item per
// transaction, dependent on the requested tracer. // transaction, dependent on the requested tracer.
// The tracing procedure should be aborted in case the closed signal is received. // The tracing procedure should be aborted in case the closed signal is received.
// nolint:gocognit
func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed <-chan interface{}) chan *blockTraceResult { func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed <-chan interface{}) chan *blockTraceResult {
if config == nil { if config == nil {
config = &TraceConfig{ config = &TraceConfig{

View file

@ -174,7 +174,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
// we remove the legacy tracer. // we remove the legacy tracer.
var x callTrace var x callTrace
json.Unmarshal(res, &x) _ = json.Unmarshal(res, &x)
res, _ = json.Marshal(x) res, _ = json.Marshal(x)
} }

View file

@ -199,13 +199,13 @@ func jsonEqualFlat(x, y interface{}) bool {
yTrace := new([]flatCallTrace) yTrace := new([]flatCallTrace)
if xj, err := json.Marshal(x); err == nil { if xj, err := json.Marshal(x); err == nil {
json.Unmarshal(xj, xTrace) _ = json.Unmarshal(xj, xTrace)
} else { } else {
return false return false
} }
if yj, err := json.Marshal(y); err == nil { if yj, err := json.Marshal(y); err == nil {
json.Unmarshal(yj, yTrace) _ = json.Unmarshal(yj, yTrace)
} else { } else {
return false return false
} }

View file

@ -55,20 +55,23 @@ type testcase struct {
func TestPrestateTracerLegacy(t *testing.T) { func TestPrestateTracerLegacy(t *testing.T) {
t.Parallel() t.Parallel()
testPrestateDiffTracer("prestateTracerLegacy", "prestate_tracer_legacy", t) testPrestateDiffTracer(t, "prestateTracerLegacy", "prestate_tracer_legacy")
} }
func TestPrestateTracer(t *testing.T) { func TestPrestateTracer(t *testing.T) {
t.Parallel() t.Parallel()
testPrestateDiffTracer("prestateTracer", "prestate_tracer", t) testPrestateDiffTracer(t, "prestateTracer", "prestate_tracer")
} }
func TestPrestateWithDiffModeTracer(t *testing.T) { func TestPrestateWithDiffModeTracer(t *testing.T) {
t.Parallel() t.Parallel()
testPrestateDiffTracer("prestateTracer", "prestate_tracer_with_diff_mode", t) testPrestateDiffTracer(t, "prestateTracer", "prestate_tracer_with_diff_mode")
} }
func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) { // nolint:gocognit
func testPrestateDiffTracer(t *testing.T, tracerName string, dirPath string) {
t.Helper()
files, err := os.ReadDir(filepath.Join("testdata", dirPath)) files, err := os.ReadDir(filepath.Join("testdata", dirPath))
if err != nil { if err != nil {
t.Fatalf("failed to retrieve tracer test suite: %v", err) t.Fatalf("failed to retrieve tracer test suite: %v", err)
@ -146,7 +149,7 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) {
// we remove the legacy tracer. // we remove the legacy tracer.
var x prestateTrace var x prestateTrace
json.Unmarshal(res, &x) _ = json.Unmarshal(res, &x)
res, _ = json.Marshal(x) res, _ = json.Marshal(x)
} }

View file

@ -166,7 +166,7 @@ func newJsTracer(code string, ctx *tracers.Context, cfg json.RawMessage) (tracer
} }
} }
t.setTypeConverters() _ = t.setTypeConverters()
t.setBuiltinFunctions() t.setBuiltinFunctions()
ret, err := vm.RunString("(" + code + ")") ret, err := vm.RunString("(" + code + ")")
@ -404,10 +404,11 @@ func wrapError(context string, err error) error {
// setBuiltinFunctions injects Go functions which are available to tracers into the environment. // setBuiltinFunctions injects Go functions which are available to tracers into the environment.
// It depends on type converters having been set up. // It depends on type converters having been set up.
// nolint:gocognit
func (t *jsTracer) setBuiltinFunctions() { func (t *jsTracer) setBuiltinFunctions() {
vm := t.vm vm := t.vm
// TODO: load console from goja-nodejs // TODO: load console from goja-nodejs
vm.Set("toHex", func(v goja.Value) string { _ = vm.Set("toHex", func(v goja.Value) string {
b, err := t.fromBuf(vm, v, false) b, err := t.fromBuf(vm, v, false)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -416,7 +417,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return hexutil.Encode(b) return hexutil.Encode(b)
}) })
vm.Set("toWord", func(v goja.Value) goja.Value { _ = vm.Set("toWord", func(v goja.Value) goja.Value {
// TODO: add test with []byte len < 32 or > 32 // TODO: add test with []byte len < 32 or > 32
b, err := t.fromBuf(vm, v, true) b, err := t.fromBuf(vm, v, true)
if err != nil { if err != nil {
@ -434,7 +435,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return res return res
}) })
vm.Set("toAddress", func(v goja.Value) goja.Value { _ = vm.Set("toAddress", func(v goja.Value) goja.Value {
a, err := t.fromBuf(vm, v, true) a, err := t.fromBuf(vm, v, true)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -451,7 +452,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return res return res
}) })
vm.Set("toContract", func(from goja.Value, nonce uint) goja.Value { _ = vm.Set("toContract", func(from goja.Value, nonce uint) goja.Value {
a, err := t.fromBuf(vm, from, true) a, err := t.fromBuf(vm, from, true)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -469,7 +470,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return res return res
}) })
vm.Set("toContract2", func(from goja.Value, salt string, initcode goja.Value) goja.Value { _ = vm.Set("toContract2", func(from goja.Value, salt string, initcode goja.Value) goja.Value {
a, err := t.fromBuf(vm, from, true) a, err := t.fromBuf(vm, from, true)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -496,7 +497,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return res return res
}) })
vm.Set("isPrecompiled", func(v goja.Value) bool { _ = vm.Set("isPrecompiled", func(v goja.Value) bool {
a, err := t.fromBuf(vm, v, true) a, err := t.fromBuf(vm, v, true)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -512,7 +513,7 @@ func (t *jsTracer) setBuiltinFunctions() {
return false return false
}) })
vm.Set("slice", func(slice goja.Value, start, end int) goja.Value { _ = vm.Set("slice", func(slice goja.Value, start, end int) goja.Value {
b, err := t.fromBuf(vm, slice, false) b, err := t.fromBuf(vm, slice, false)
if err != nil { if err != nil {
vm.Interrupt(err) vm.Interrupt(err)
@ -589,9 +590,9 @@ func (o *opObj) IsPush() bool {
func (o *opObj) setupObject() *goja.Object { func (o *opObj) setupObject() *goja.Object {
obj := o.vm.NewObject() obj := o.vm.NewObject()
obj.Set("toNumber", o.vm.ToValue(o.ToNumber)) _ = obj.Set("toNumber", o.vm.ToValue(o.ToNumber))
obj.Set("toString", o.vm.ToValue(o.ToString)) _ = obj.Set("toString", o.vm.ToValue(o.ToString))
obj.Set("isPush", o.vm.ToValue(o.IsPush)) _ = obj.Set("isPush", o.vm.ToValue(o.IsPush))
return obj return obj
} }
@ -671,9 +672,9 @@ func (mo *memoryObj) Length() int {
func (m *memoryObj) setupObject() *goja.Object { func (m *memoryObj) setupObject() *goja.Object {
o := m.vm.NewObject() o := m.vm.NewObject()
o.Set("slice", m.vm.ToValue(m.Slice)) _ = o.Set("slice", m.vm.ToValue(m.Slice))
o.Set("getUint", m.vm.ToValue(m.GetUint)) _ = o.Set("getUint", m.vm.ToValue(m.GetUint))
o.Set("length", m.vm.ToValue(m.Length)) _ = o.Set("length", m.vm.ToValue(m.Length))
return o return o
} }
@ -716,8 +717,8 @@ func (s *stackObj) Length() int {
func (s *stackObj) setupObject() *goja.Object { func (s *stackObj) setupObject() *goja.Object {
o := s.vm.NewObject() o := s.vm.NewObject()
o.Set("peek", s.vm.ToValue(s.Peek)) _ = o.Set("peek", s.vm.ToValue(s.Peek))
o.Set("length", s.vm.ToValue(s.Length)) _ = o.Set("length", s.vm.ToValue(s.Length))
return o return o
} }
@ -821,11 +822,11 @@ func (do *dbObj) Exists(addrSlice goja.Value) bool {
func (do *dbObj) setupObject() *goja.Object { func (do *dbObj) setupObject() *goja.Object {
o := do.vm.NewObject() o := do.vm.NewObject()
o.Set("getBalance", do.vm.ToValue(do.GetBalance)) _ = o.Set("getBalance", do.vm.ToValue(do.GetBalance))
o.Set("getNonce", do.vm.ToValue(do.GetNonce)) _ = o.Set("getNonce", do.vm.ToValue(do.GetNonce))
o.Set("getCode", do.vm.ToValue(do.GetCode)) _ = o.Set("getCode", do.vm.ToValue(do.GetCode))
o.Set("getState", do.vm.ToValue(do.GetState)) _ = o.Set("getState", do.vm.ToValue(do.GetState))
o.Set("exists", do.vm.ToValue(do.Exists)) _ = o.Set("exists", do.vm.ToValue(do.Exists))
return o return o
} }
@ -887,10 +888,10 @@ func (co *contractObj) GetInput() goja.Value {
func (c *contractObj) setupObject() *goja.Object { func (c *contractObj) setupObject() *goja.Object {
o := c.vm.NewObject() o := c.vm.NewObject()
o.Set("getCaller", c.vm.ToValue(c.GetCaller)) _ = o.Set("getCaller", c.vm.ToValue(c.GetCaller))
o.Set("getAddress", c.vm.ToValue(c.GetAddress)) _ = o.Set("getAddress", c.vm.ToValue(c.GetAddress))
o.Set("getValue", c.vm.ToValue(c.GetValue)) _ = o.Set("getValue", c.vm.ToValue(c.GetValue))
o.Set("getInput", c.vm.ToValue(c.GetInput)) _ = o.Set("getInput", c.vm.ToValue(c.GetInput))
return o return o
} }
@ -969,12 +970,12 @@ func (f *callframe) GetValue() goja.Value {
func (f *callframe) setupObject() *goja.Object { func (f *callframe) setupObject() *goja.Object {
o := f.vm.NewObject() o := f.vm.NewObject()
o.Set("getType", f.vm.ToValue(f.GetType)) _ = o.Set("getType", f.vm.ToValue(f.GetType))
o.Set("getFrom", f.vm.ToValue(f.GetFrom)) _ = o.Set("getFrom", f.vm.ToValue(f.GetFrom))
o.Set("getTo", f.vm.ToValue(f.GetTo)) _ = o.Set("getTo", f.vm.ToValue(f.GetTo))
o.Set("getInput", f.vm.ToValue(f.GetInput)) _ = o.Set("getInput", f.vm.ToValue(f.GetInput))
o.Set("getGas", f.vm.ToValue(f.GetGas)) _ = o.Set("getGas", f.vm.ToValue(f.GetGas))
o.Set("getValue", f.vm.ToValue(f.GetValue)) _ = o.Set("getValue", f.vm.ToValue(f.GetValue))
return o return o
} }
@ -1012,9 +1013,9 @@ func (r *callframeResult) GetError() goja.Value {
func (r *callframeResult) setupObject() *goja.Object { func (r *callframeResult) setupObject() *goja.Object {
o := r.vm.NewObject() o := r.vm.NewObject()
o.Set("getGasUsed", r.vm.ToValue(r.GetGasUsed)) _ = o.Set("getGasUsed", r.vm.ToValue(r.GetGasUsed))
o.Set("getOutput", r.vm.ToValue(r.GetOutput)) _ = o.Set("getOutput", r.vm.ToValue(r.GetOutput))
o.Set("getError", r.vm.ToValue(r.GetError)) _ = o.Set("getError", r.vm.ToValue(r.GetError))
return o return o
} }
@ -1052,17 +1053,17 @@ func (l *steplog) GetError() goja.Value {
func (l *steplog) setupObject() *goja.Object { func (l *steplog) setupObject() *goja.Object {
o := l.vm.NewObject() o := l.vm.NewObject()
// Setup basic fields. // Setup basic fields.
o.Set("getPC", l.vm.ToValue(l.GetPC)) _ = o.Set("getPC", l.vm.ToValue(l.GetPC))
o.Set("getGas", l.vm.ToValue(l.GetGas)) _ = o.Set("getGas", l.vm.ToValue(l.GetGas))
o.Set("getCost", l.vm.ToValue(l.GetCost)) _ = o.Set("getCost", l.vm.ToValue(l.GetCost))
o.Set("getDepth", l.vm.ToValue(l.GetDepth)) _ = o.Set("getDepth", l.vm.ToValue(l.GetDepth))
o.Set("getRefund", l.vm.ToValue(l.GetRefund)) _ = o.Set("getRefund", l.vm.ToValue(l.GetRefund))
o.Set("getError", l.vm.ToValue(l.GetError)) _ = o.Set("getError", l.vm.ToValue(l.GetError))
// Setup nested objects. // Setup nested objects.
o.Set("op", l.op.setupObject()) _ = o.Set("op", l.op.setupObject())
o.Set("stack", l.stack.setupObject()) _ = o.Set("stack", l.stack.setupObject())
o.Set("memory", l.memory.setupObject()) _ = o.Set("memory", l.memory.setupObject())
o.Set("contract", l.contract.setupObject()) _ = o.Set("contract", l.contract.setupObject())
return o return o
} }

View file

@ -95,6 +95,7 @@ func (l *JSONLogger) CaptureEnd(output []byte, gasUsed uint64, err error) {
errMsg = err.Error() errMsg = err.Error()
} }
// nolint:errchkjson
_ = l.encoder.Encode(endLog{common.Bytes2Hex(output), math.HexOrDecimal64(gasUsed), errMsg}) _ = l.encoder.Encode(endLog{common.Bytes2Hex(output), math.HexOrDecimal64(gasUsed), errMsg})
} }

View file

@ -357,7 +357,7 @@ func testSubscribeFullPendingTransactions(t *testing.T, client *rpc.Client) {
ethcl := ethclient.NewClient(client) ethcl := ethclient.NewClient(client)
// Subscribe to Transactions // Subscribe to Transactions
ch := make(chan *types.Transaction) ch := make(chan *types.Transaction)
ec.SubscribeFullPendingTransactions(context.Background(), ch) _, _ = ec.SubscribeFullPendingTransactions(context.Background(), ch)
// Send a transaction // Send a transaction
chainID, err := ethcl.ChainID(context.Background()) chainID, err := ethcl.ChainID(context.Background())
if err != nil { if err != nil {

View file

@ -205,6 +205,7 @@ type Transaction struct {
// resolve returns the internal transaction object, fetching it if needed. // resolve returns the internal transaction object, fetching it if needed.
// It also returns the block the tx blongs to, unless it is a pending tx. // It also returns the block the tx blongs to, unless it is a pending tx.
// nolint:unparam
func (t *Transaction) resolve(ctx context.Context) (*types.Transaction, *Block, error) { func (t *Transaction) resolve(ctx context.Context) (*types.Transaction, *Block, error) {
t.mu.Lock() t.mu.Lock()
defer t.mu.Unlock() defer t.mu.Unlock()
@ -540,7 +541,7 @@ func (t *Transaction) getLogs(ctx context.Context, hash common.Hash) (*[]*Log, e
return nil, err return nil, err
} }
var ret []*Log ret := make([]*Log, len(logs))
// Select tx logs from all block logs // Select tx logs from all block logs
ix := sort.Search(len(logs), func(i int) bool { return uint64(logs[i].TxIndex) >= t.index }) ix := sort.Search(len(logs), func(i int) bool { return uint64(logs[i].TxIndex) >= t.index })
for ix < len(logs) && uint64(logs[ix].TxIndex) == t.index { for ix < len(logs) && uint64(logs[ix].TxIndex) == t.index {

View file

@ -82,7 +82,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// chunked transfer encoding must be disabled by setting content-length. // chunked transfer encoding must be disabled by setting content-length.
w.Header().Set("content-type", "application/json") w.Header().Set("content-type", "application/json")
w.Header().Set("content-length", strconv.Itoa(len(responseJSON))) w.Header().Set("content-length", strconv.Itoa(len(responseJSON)))
w.Write(responseJSON) _, _ = w.Write(responseJSON)
if flush, ok := w.(http.Flusher); ok { if flush, ok := w.(http.Flusher); ok {
flush.Flush() flush.Flush()
@ -106,7 +106,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.Write(responseJSON) _, _ = w.Write(responseJSON)
}) })
} }

View file

@ -2335,6 +2335,7 @@ func (s *TransactionAPI) PendingTransactions() ([]*RPCTransaction, error) {
// Resend accepts an existing transaction and a new gas price and limit. It will remove // Resend accepts an existing transaction and a new gas price and limit. It will remove
// the given transaction from the pool and reinsert it with the new gas price and limit. // the given transaction from the pool and reinsert it with the new gas price and limit.
// nolint:gocognit
func (s *TransactionAPI) Resend(ctx context.Context, sendArgs TransactionArgs, gasPrice *hexutil.Big, gasLimit *hexutil.Uint64) (common.Hash, error) { func (s *TransactionAPI) Resend(ctx context.Context, sendArgs TransactionArgs, gasPrice *hexutil.Big, gasLimit *hexutil.Uint64) (common.Hash, error) {
if sendArgs.Nonce == nil { if sendArgs.Nonce == nil {
return common.Hash{}, fmt.Errorf("missing transaction nonce in transaction spec") return common.Hash{}, fmt.Errorf("missing transaction nonce in transaction spec")

View file

@ -125,9 +125,9 @@ func doMigrateFlags(ctx *cli.Context) {
// "alfa, beta, gamma" instead of "[alfa beta gamma]", in order // "alfa, beta, gamma" instead of "[alfa beta gamma]", in order
// for the backing StringSlice to parse it properly. // for the backing StringSlice to parse it properly.
if result := parent.StringSlice(name); len(result) > 0 { if result := parent.StringSlice(name); len(result) > 0 {
ctx.Set(name, strings.Join(result, ",")) _ = ctx.Set(name, strings.Join(result, ","))
} else { } else {
ctx.Set(name, parent.String(name)) _ = ctx.Set(name, parent.String(name))
} }
break break

View file

@ -335,7 +335,7 @@ func testRequest(ctx context.Context, t *testing.T, client *rpc.Client) bool {
var addr common.Address var addr common.Address
crand.Read(addr[:]) _, _ = crand.Read(addr[:])
c, cancel := context.WithTimeout(ctx, time.Second*12) c, cancel := context.WithTimeout(ctx, time.Second*12)
defer cancel() defer cancel()

View file

@ -123,7 +123,7 @@ func (b *benchmarkProofsOrCode) init(h *serverHandler, count int) error {
func (b *benchmarkProofsOrCode) request(peer *serverPeer, index int) error { func (b *benchmarkProofsOrCode) request(peer *serverPeer, index int) error {
key := make([]byte, 32) key := make([]byte, 32)
crand.Read(key) _, _ = crand.Read(key)
if b.code { if b.code {
return peer.requestCode(0, []CodeReq{{BHash: b.headHash, AccKey: key}}) return peer.requestCode(0, []CodeReq{{BHash: b.headHash, AccKey: key}})
@ -190,7 +190,7 @@ func (b *benchmarkTxSend) init(h *serverHandler, count int) error {
for i := range b.txs { for i := range b.txs {
data := make([]byte, txSizeCostLimit) data := make([]byte, txSizeCostLimit)
crand.Read(data) _, _ = crand.Read(data)
tx, err := types.SignTx(types.NewTransaction(0, addr, new(big.Int), 0, new(big.Int), data), signer, key) tx, err := types.SignTx(types.NewTransaction(0, addr, new(big.Int), 0, new(big.Int), data), signer, key)
if err != nil { if err != nil {
@ -218,7 +218,7 @@ func (b *benchmarkTxStatus) init(h *serverHandler, count int) error {
func (b *benchmarkTxStatus) request(peer *serverPeer, index int) error { func (b *benchmarkTxStatus) request(peer *serverPeer, index int) error {
var hash common.Hash var hash common.Hash
crand.Read(hash[:]) _, _ = crand.Read(hash[:])
return peer.requestTxStatus(0, []common.Hash{hash}) return peer.requestTxStatus(0, []common.Hash{hash})
} }
@ -305,7 +305,7 @@ func (h *serverHandler) measure(setup *benchmarkSetup, count int) error {
var id enode.ID var id enode.ID
crand.Read(id[:]) _, _ = crand.Read(id[:])
peer1 := newServerPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "client", nil), clientMeteredPipe) peer1 := newServerPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "client", nil), clientMeteredPipe)
peer2 := newClientPeer(lpv2, NetworkId, p2p.NewPeer(id, "server", nil), serverMeteredPipe) peer2 := newClientPeer(lpv2, NetworkId, p2p.NewPeer(id, "server", nil), serverMeteredPipe)

View file

@ -44,6 +44,7 @@ var (
testBalance = big.NewInt(2e18) testBalance = big.NewInt(2e18)
) )
// nolint:unparam
func generatePreMergeChain(pre, post int) (*core.Genesis, []*types.Header, []*types.Block, []*types.Header, []*types.Block) { func generatePreMergeChain(pre, post int) (*core.Genesis, []*types.Header, []*types.Block, []*types.Header, []*types.Block) {
config := *params.AllEthashProtocolChanges config := *params.AllEthashProtocolChanges
genesis := &core.Genesis{ genesis := &core.Genesis{
@ -57,7 +58,7 @@ func generatePreMergeChain(pre, post int) (*core.Genesis, []*types.Header, []*ty
db, preBLocks, _ := core.GenerateChainWithGenesis(genesis, ethash.NewFaker(), pre, nil) db, preBLocks, _ := core.GenerateChainWithGenesis(genesis, ethash.NewFaker(), pre, nil)
totalDifficulty := new(big.Int).Set(params.GenesisDifficulty) totalDifficulty := new(big.Int).Set(params.GenesisDifficulty)
var preHeaders []*types.Header preHeaders := make([]*types.Header, 0, len(preBLocks))
for _, b := range preBLocks { for _, b := range preBLocks {
totalDifficulty.Add(totalDifficulty, b.Difficulty()) totalDifficulty.Add(totalDifficulty, b.Difficulty())
@ -72,7 +73,7 @@ func generatePreMergeChain(pre, post int) (*core.Genesis, []*types.Header, []*ty
b.SetPoS() b.SetPoS()
}) })
var postHeaders []*types.Header postHeaders := make([]*types.Header, 0, len(postBlocks))
for _, b := range postBlocks { for _, b := range postBlocks {
postHeaders = append(postHeaders, b.Header()) postHeaders = append(postHeaders, b.Header())
} }

View file

@ -19,7 +19,6 @@ package les
import ( import (
"fmt" "fmt"
"github.com/ethereum/go-ethereum/eth/downloader/whitelist"
"strings" "strings"
"time" "time"
@ -32,6 +31,7 @@ import (
"github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/bloombits"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth/downloader/whitelist"
"github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/eth/ethconfig"
"github.com/ethereum/go-ethereum/eth/gasprice" "github.com/ethereum/go-ethereum/eth/gasprice"
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
@ -188,9 +188,9 @@ func New(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error) {
log.Warn("Rewinding chain to upgrade configuration", "err", compat) log.Warn("Rewinding chain to upgrade configuration", "err", compat)
if compat.RewindToTime > 0 { if compat.RewindToTime > 0 {
leth.blockchain.SetHeadWithTimestamp(compat.RewindToTime) _ = leth.blockchain.SetHeadWithTimestamp(compat.RewindToTime)
} else { } else {
leth.blockchain.SetHead(compat.RewindToBlock) _ = leth.blockchain.SetHead(compat.RewindToBlock)
} }
rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig) rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig)

View file

@ -631,8 +631,8 @@ func (s *stateSync) processNodeData(nodeTasks map[string]*trieTask, codeTasks ma
var hash common.Hash var hash common.Hash
s.keccak.Reset() s.keccak.Reset()
s.keccak.Write(blob) _, _ = s.keccak.Write(blob)
s.keccak.Read(hash[:]) _, _ = s.keccak.Read(hash[:])
if _, present := codeTasks[hash]; present { if _, present := codeTasks[hash]; present {
err := s.sched.ProcessCode(trie.CodeSyncResult{ err := s.sched.ProcessCode(trie.CodeSyncResult{

View file

@ -34,7 +34,7 @@ import (
var noopReleaser = tracers.StateReleaseFunc(func() {}) var noopReleaser = tracers.StateReleaseFunc(func() {})
// stateAtBlock retrieves the state database associated with a certain block. // stateAtBlock retrieves the state database associated with a certain block.
func (leth *LightEthereum) stateAtBlock(ctx context.Context, block *types.Block, reexec uint64) (*state.StateDB, tracers.StateReleaseFunc, error) { func (leth *LightEthereum) stateAtBlock(ctx context.Context, block *types.Block, _ uint64) (*state.StateDB, tracers.StateReleaseFunc, error) {
return light.NewState(ctx, block.Header(), leth.odr), noopReleaser, nil return light.NewState(ctx, block.Header(), leth.odr), noopReleaser, nil
} }

View file

@ -424,6 +424,7 @@ func (lc *LightChain) SetCanonical(header *types.Header) error {
} }
// Emit events // Emit events
block := types.NewBlockWithHeader(header) block := types.NewBlockWithHeader(header)
lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()}) lc.chainFeed.Send(core.ChainEvent{Block: block, Hash: block.Hash()})
lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block}) lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: block})
log.Info("Set the chain head", "number", block.Number(), "hash", block.Hash()) log.Info("Set the chain head", "number", block.Number(), "hash", block.Hash())

View file

@ -216,6 +216,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, bc *core.BlockChain
// Perform read-only call. // Perform read-only call.
st.SetBalance(testBankAddress, math.MaxBig256) st.SetBalance(testBankAddress, math.MaxBig256)
msg := &core.Message{ msg := &core.Message{
From: testBankAddress, From: testBankAddress,
To: &testContractAddr, To: &testContractAddr,
@ -307,6 +308,7 @@ func testChainOdr(t *testing.T, protocol int, fn odrTestFn) {
} }
gspec.MustCommit(ldb) gspec.MustCommit(ldb)
odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig} odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig}
lightchain, err := NewLightChain(odr, gspec.Config, ethash.NewFullFaker(), nil, nil) lightchain, err := NewLightChain(odr, gspec.Config, ethash.NewFullFaker(), nil, nil)

View file

@ -125,7 +125,7 @@ func StoreChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common
var encNumber [8]byte var encNumber [8]byte
binary.BigEndian.PutUint64(encNumber[:], sectionIdx) binary.BigEndian.PutUint64(encNumber[:], sectionIdx)
db.Put(append(append(rawdb.ChtPrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes()) _ = db.Put(append(append(rawdb.ChtPrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes())
} }
// ChtIndexerBackend implements core.ChainIndexerBackend. // ChtIndexerBackend implements core.ChainIndexerBackend.
@ -264,7 +264,7 @@ func (c *ChtIndexerBackend) Commit() error {
trimmed := bytes.TrimPrefix(it.Key(), rawdb.ChtTablePrefix) trimmed := bytes.TrimPrefix(it.Key(), rawdb.ChtTablePrefix)
if len(trimmed) == common.HashLength { if len(trimmed) == common.HashLength {
if _, ok := hashes[common.BytesToHash(trimmed)]; !ok { if _, ok := hashes[common.BytesToHash(trimmed)]; !ok {
batch.Delete(trimmed) _ = batch.Delete(trimmed)
deleted += 1 deleted += 1
} }
@ -352,7 +352,7 @@ func StoreBloomTrieRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root
var encNumber [8]byte var encNumber [8]byte
binary.BigEndian.PutUint64(encNumber[:], sectionIdx) binary.BigEndian.PutUint64(encNumber[:], sectionIdx)
db.Put(append(append(rawdb.BloomTriePrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes()) _ = db.Put(append(append(rawdb.BloomTriePrefix, encNumber[:]...), sectionHead.Bytes()...), root.Bytes())
} }
// BloomTrieIndexerBackend implements core.ChainIndexerBackend // BloomTrieIndexerBackend implements core.ChainIndexerBackend
@ -558,7 +558,7 @@ func (b *BloomTrieIndexerBackend) Commit() error {
trimmed := bytes.TrimPrefix(it.Key(), rawdb.BloomTrieTablePrefix) trimmed := bytes.TrimPrefix(it.Key(), rawdb.BloomTrieTablePrefix)
if len(trimmed) == common.HashLength { if len(trimmed) == common.HashLength {
if _, ok := hashes[common.BytesToHash(trimmed)]; !ok { if _, ok := hashes[common.BytesToHash(trimmed)]; !ok {
batch.Delete(trimmed) _ = batch.Delete(trimmed)
deleted += 1 deleted += 1
} }

View file

@ -99,6 +99,7 @@ func TestTxPool(t *testing.T) {
} }
gspec.MustCommit(ldb) gspec.MustCommit(ldb)
odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig} odr := &testOdr{sdb: sdb, ldb: ldb, serverState: blockchain.StateCache(), indexerConfig: TestClientIndexerConfig}
relay := &testTxRelay{ relay := &testTxRelay{
send: make(chan int, 1), send: make(chan int, 1),

View file

@ -2,8 +2,6 @@ package miner
import ( import (
"errors" "errors"
"github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/trie"
"math/big" "math/big"
"testing" "testing"
"time" "time"
@ -18,6 +16,7 @@ import (
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
@ -26,6 +25,7 @@ import (
"github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/tests/bor/mocks" "github.com/ethereum/go-ethereum/tests/bor/mocks"
"github.com/ethereum/go-ethereum/trie"
) )
type DefaultBorMiner struct { type DefaultBorMiner struct {

View file

@ -73,6 +73,7 @@ var DefaultConfig = Config{
} }
// Miner creates blocks and searches for proof-of-work values. // Miner creates blocks and searches for proof-of-work values.
// nolint:staticcheck
type Miner struct { type Miner struct {
mux *event.TypeMux mux *event.TypeMux
eth Backend eth Backend

View file

@ -270,7 +270,11 @@ func waitForMiningState(t *testing.T, m *Miner, mining bool) {
t.Fatalf("Mining() == %t, want %t", state, mining) t.Fatalf("Mining() == %t, want %t", state, mining)
} }
// createMiner is not used in bor as NewBorDefaultMiner replaces it
// nolint:staticcheck
func createMiner(t *testing.T) (*Miner, *event.TypeMux, func(skipMiner bool)) { func createMiner(t *testing.T) (*Miner, *event.TypeMux, func(skipMiner bool)) {
t.Helper()
// Create Ethash config // Create Ethash config
config := Config{ config := Config{
Etherbase: common.HexToAddress("123456789"), Etherbase: common.HexToAddress("123456789"),
@ -297,6 +301,7 @@ func createMiner(t *testing.T) (*Miner, *event.TypeMux, func(skipMiner bool)) {
pool := txpool.NewTxPool(testTxPoolConfig, chainConfig, blockchain) pool := txpool.NewTxPool(testTxPoolConfig, chainConfig, blockchain)
backend := NewMockBackend(bc, pool) backend := NewMockBackend(bc, pool)
// Create event Mux // Create event Mux
// nolint:staticcheck
mux := new(event.TypeMux) mux := new(event.TypeMux)
// Create Miner // Create Miner
miner := New(backend, &config, chainConfig, mux, engine, nil) miner := New(backend, &config, chainConfig, mux, engine, nil)

View file

@ -47,10 +47,10 @@ func (args *BuildPayloadArgs) Id() engine.PayloadID {
// Hash // Hash
hasher := sha256.New() hasher := sha256.New()
hasher.Write(args.Parent[:]) hasher.Write(args.Parent[:])
binary.Write(hasher, binary.BigEndian, args.Timestamp) _ = binary.Write(hasher, binary.BigEndian, args.Timestamp)
hasher.Write(args.Random[:]) hasher.Write(args.Random[:])
hasher.Write(args.FeeRecipient[:]) hasher.Write(args.FeeRecipient[:])
rlp.Encode(hasher, args.Withdrawals) _ = rlp.Encode(hasher, args.Withdrawals)
var out engine.PayloadID var out engine.PayloadID

View file

@ -30,6 +30,8 @@ import (
) )
func TestBuildPayload(t *testing.T) { func TestBuildPayload(t *testing.T) {
t.Parallel()
var ( var (
db = rawdb.NewMemoryDatabase() db = rawdb.NewMemoryDatabase()
recipient = common.HexToAddress("0xdeadbeef") recipient = common.HexToAddress("0xdeadbeef")
@ -90,51 +92,53 @@ func TestBuildPayload(t *testing.T) {
} }
func TestPayloadId(t *testing.T) { func TestPayloadId(t *testing.T) {
t.Parallel()
ids := make(map[string]int) ids := make(map[string]int)
for i, tt := range []*BuildPayloadArgs{ for i, tt := range []*BuildPayloadArgs{
&BuildPayloadArgs{ {
Parent: common.Hash{1}, Parent: common.Hash{1},
Timestamp: 1, Timestamp: 1,
Random: common.Hash{0x1}, Random: common.Hash{0x1},
FeeRecipient: common.Address{0x1}, FeeRecipient: common.Address{0x1},
}, },
// Different parent // Different parent
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 1, Timestamp: 1,
Random: common.Hash{0x1}, Random: common.Hash{0x1},
FeeRecipient: common.Address{0x1}, FeeRecipient: common.Address{0x1},
}, },
// Different timestamp // Different timestamp
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 2, Timestamp: 2,
Random: common.Hash{0x1}, Random: common.Hash{0x1},
FeeRecipient: common.Address{0x1}, FeeRecipient: common.Address{0x1},
}, },
// Different Random // Different Random
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 2, Timestamp: 2,
Random: common.Hash{0x2}, Random: common.Hash{0x2},
FeeRecipient: common.Address{0x1}, FeeRecipient: common.Address{0x1},
}, },
// Different fee-recipient // Different fee-recipient
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 2, Timestamp: 2,
Random: common.Hash{0x2}, Random: common.Hash{0x2},
FeeRecipient: common.Address{0x2}, FeeRecipient: common.Address{0x2},
}, },
// Different withdrawals (non-empty) // Different withdrawals (non-empty)
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 2, Timestamp: 2,
Random: common.Hash{0x2}, Random: common.Hash{0x2},
FeeRecipient: common.Address{0x2}, FeeRecipient: common.Address{0x2},
Withdrawals: []*types.Withdrawal{ Withdrawals: []*types.Withdrawal{
&types.Withdrawal{ {
Index: 0, Index: 0,
Validator: 0, Validator: 0,
Address: common.Address{}, Address: common.Address{},
@ -143,13 +147,13 @@ func TestPayloadId(t *testing.T) {
}, },
}, },
// Different withdrawals (non-empty) // Different withdrawals (non-empty)
&BuildPayloadArgs{ {
Parent: common.Hash{2}, Parent: common.Hash{2},
Timestamp: 2, Timestamp: 2,
Random: common.Hash{0x2}, Random: common.Hash{0x2},
FeeRecipient: common.Address{0x2}, FeeRecipient: common.Address{0x2},
Withdrawals: []*types.Withdrawal{ Withdrawals: []*types.Withdrawal{
&types.Withdrawal{ {
Index: 2, Index: 2,
Validator: 0, Validator: 0,
Address: common.Address{}, Address: common.Address{},

View file

@ -171,7 +171,7 @@ func makeTransaction(nonce uint64, privKey *ecdsa.PrivateKey, signer types.Signe
// larger buffer for creating both valid and invalid transactions. // larger buffer for creating both valid and invalid transactions.
var buf = make([]byte, 32+5) var buf = make([]byte, 32+5)
crand.Read(buf) _, _ = crand.Read(buf)
gasTipCap := new(big.Int).SetBytes(buf) gasTipCap := new(big.Int).SetBytes(buf)
// If the given base fee is nil(the 1559 is still not available), // If the given base fee is nil(the 1559 is still not available),
@ -183,7 +183,7 @@ func makeTransaction(nonce uint64, privKey *ecdsa.PrivateKey, signer types.Signe
var gasFeeCap *big.Int var gasFeeCap *big.Int
if rand.Intn(4) == 0 { if rand.Intn(4) == 0 {
crand.Read(buf) _, _ = crand.Read(buf)
gasFeeCap = new(big.Int).SetBytes(buf) gasFeeCap = new(big.Int).SetBytes(buf)
} else { } else {
gasFeeCap = new(big.Int).Add(baseFee, gasTipCap) gasFeeCap = new(big.Int).Add(baseFee, gasTipCap)

View file

@ -212,7 +212,7 @@ func (n *ethNode) insertBlock(eb engine.ExecutableData) error {
} }
} }
func (n *ethNode) insertBlockAndSetHead(parent *types.Header, ed engine.ExecutableData) error { func (n *ethNode) insertBlockAndSetHead(_ *types.Header, ed engine.ExecutableData) error {
if !eth2types(n.typ) { if !eth2types(n.typ) {
return errors.New("invalid node type") return errors.New("invalid node type")
} }
@ -359,7 +359,7 @@ func (mgr *nodeManager) run() {
SafeBlockHash: oldest.Hash(), SafeBlockHash: oldest.Hash(),
FinalizedBlockHash: oldest.Hash(), FinalizedBlockHash: oldest.Hash(),
} }
node.api.ForkchoiceUpdatedV1(fcState, nil) _, _ = node.api.ForkchoiceUpdatedV1(fcState, nil)
} }
log.Info("Finalised eth2 block", "number", oldest.NumberU64(), "hash", oldest.Hash()) log.Info("Finalised eth2 block", "number", oldest.NumberU64(), "hash", oldest.Hash())
@ -473,6 +473,7 @@ func main() {
node := nodes[index%len(nodes)] node := nodes[index%len(nodes)]
// Create a self transaction and inject into the pool // Create a self transaction and inject into the pool
// nolint:gosec
tx, err := types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(10_000_000_000+rand.Int63n(6_553_600_000)), nil), types.HomesteadSigner{}, faucets[index]) tx, err := types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(10_000_000_000+rand.Int63n(6_553_600_000)), nil), types.HomesteadSigner{}, faucets[index])
if err != nil { if err != nil {
panic(err) panic(err)

View file

@ -50,6 +50,18 @@ const (
) )
func init() { func init() {
testTxPoolConfig = txpool.DefaultConfig
testTxPoolConfig.Journal = ""
ethashChainConfig = new(params.ChainConfig)
*ethashChainConfig = *params.TestChainConfig
cliqueChainConfig = new(params.ChainConfig)
*cliqueChainConfig = *params.TestChainConfig
cliqueChainConfig.Clique = &params.CliqueConfig{
Period: 10,
Epoch: 30000,
}
signer := types.LatestSigner(params.TestChainConfig) signer := types.LatestSigner(params.TestChainConfig)
tx1 := types.MustSignNewTx(testBankKey, signer, &types.AccessListTx{ tx1 := types.MustSignNewTx(testBankKey, signer, &types.AccessListTx{
@ -204,7 +216,7 @@ func (b *testWorkerBackend) newRandomTxWithNonce(creation bool, nonce uint64) *t
return tx return tx
} }
// newRandomTxWithGas creates a new transaction to deploy a storage smart contract. // newStorageCreateContractTx creates a new transaction to deploy a storage smart contract.
func (b *testWorkerBackend) newStorageCreateContractTx() (*types.Transaction, common.Address) { func (b *testWorkerBackend) newStorageCreateContractTx() (*types.Transaction, common.Address) {
var tx *types.Transaction var tx *types.Transaction

View file

@ -637,7 +637,7 @@ func (w *worker) newWorkLoop(ctx context.Context, recommit time.Duration) {
// mainLoop is responsible for generating and submitting sealing work based on // mainLoop is responsible for generating and submitting sealing work based on
// the received event. It can support two modes: automatically generate task and // the received event. It can support two modes: automatically generate task and
// submit it or return task according to given parameters for various proposes. // submit it or return task according to given parameters for various proposes.
// nolint: gocognit // nolint: gocognit, contextcheck
func (w *worker) mainLoop(ctx context.Context) { func (w *worker) mainLoop(ctx context.Context) {
defer w.wg.Done() defer w.wg.Done()
defer w.txsSub.Unsubscribe() defer w.txsSub.Unsubscribe()
@ -655,7 +655,6 @@ func (w *worker) mainLoop(ctx context.Context) {
for { for {
select { select {
case req := <-w.newWorkCh: case req := <-w.newWorkCh:
//nolint:contextcheck
if w.isRunning() { if w.isRunning() {
w.commitWork(req.ctx, req.interrupt, req.noempty, req.timestamp) w.commitWork(req.ctx, req.interrupt, req.noempty, req.timestamp)
} }
@ -1696,7 +1695,7 @@ func (w *worker) commitWork(ctx context.Context, interrupt *atomic.Int32, noempt
// Create an empty block based on temporary copied state for // Create an empty block based on temporary copied state for
// sealing in advance without waiting block execution finished. // sealing in advance without waiting block execution finished.
if !noempty && !w.noempty.Load() { if !noempty && !w.noempty.Load() {
w.commit(ctx, work.copy(), nil, false, start) _ = w.commit(ctx, work.copy(), nil, false, start)
} }
// Fill pending transactions from the txpool into the block. // Fill pending transactions from the txpool into the block.
err = w.fillTransactions(ctx, interrupt, work, interruptCtx) err = w.fillTransactions(ctx, interrupt, work, interruptCtx)
@ -1730,7 +1729,7 @@ func (w *worker) commitWork(ctx context.Context, interrupt *atomic.Int32, noempt
return return
} }
// Submit the generated block for consensus sealing. // Submit the generated block for consensus sealing.
w.commit(ctx, work.copy(), w.fullTaskHook, true, start) _ = w.commit(ctx, work.copy(), w.fullTaskHook, true, start)
// Swap out the old work with the new one, terminating any leftover // Swap out the old work with the new one, terminating any leftover
// prefetcher processes in the mean time and starting a new one. // prefetcher processes in the mean time and starting a new one.

View file

@ -17,11 +17,6 @@
package miner package miner
import ( import (
"crypto/rand"
"errors"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/event"
"math/big" "math/big"
"os" "os"
"sync/atomic" "sync/atomic"
@ -40,10 +35,11 @@ import (
"github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/consensus/ethash"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/txpool" "github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/tests/bor/mocks" "github.com/ethereum/go-ethereum/tests/bor/mocks"
@ -83,6 +79,7 @@ func init() {
} }
// newTestWorker creates a new test worker with the given parameters. // newTestWorker creates a new test worker with the given parameters.
// nolint:unparam
func newTestWorker(t TensingObject, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, blocks int, noempty bool, delay uint, opcodeDelay uint) (*worker, *testWorkerBackend, func()) { func newTestWorker(t TensingObject, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, blocks int, noempty bool, delay uint, opcodeDelay uint) (*worker, *testWorkerBackend, func()) {
backend := newTestWorkerBackend(t, chainConfig, engine, db, blocks) backend := newTestWorkerBackend(t, chainConfig, engine, db, blocks)
backend.txPool.AddLocals(pendingTxs) backend.txPool.AddLocals(pendingTxs)
@ -105,89 +102,6 @@ func newTestWorker(t TensingObject, chainConfig *params.ChainConfig, engine cons
return w, backend, w.close return w, backend, w.close
} }
func (b *testWorkerBackend) BlockChain() *core.BlockChain { return b.chain }
func (b *testWorkerBackend) TxPool() *txpool.TxPool { return b.txPool }
func (b *testWorkerBackend) StateAtBlock(block *types.Block, reexec uint64, base *state.StateDB, checkLive bool, preferDisk bool) (statedb *state.StateDB, err error) {
return nil, errors.New("not supported")
}
func (b *testWorkerBackend) newRandomUncle() (*types.Block, error) {
var parent *types.Block
cur := b.chain.CurrentBlock()
if cur.Number.Uint64() == 0 {
parent = b.chain.Genesis()
} else {
parent = b.chain.GetBlockByHash(b.chain.CurrentBlock().ParentHash)
}
var err error
blocks, _ := core.GenerateChain(b.chain.Config(), parent, b.chain.Engine(), b.DB, 1, func(i int, gen *core.BlockGen) {
var addr = make([]byte, common.AddressLength)
_, err = rand.Read(addr)
if err != nil {
return
}
gen.SetCoinbase(common.BytesToAddress(addr))
})
return blocks[0], err
}
func (b *testWorkerBackend) newRandomTx(creation bool) *types.Transaction {
var tx *types.Transaction
gasPrice := big.NewInt(10 * params.InitialBaseFee)
if creation {
tx, _ = types.SignTx(types.NewContractCreation(b.txPool.Nonce(TestBankAddress), big.NewInt(0), testGas, gasPrice, common.FromHex(testCode)), types.HomesteadSigner{}, testBankKey)
} else {
tx, _ = types.SignTx(types.NewTransaction(b.txPool.Nonce(TestBankAddress), testUserAddress, big.NewInt(1000), params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey)
}
return tx
}
// newRandomTxWithNonce creates a new transaction with the given nonce.
func (b *testWorkerBackend) newRandomTxWithNonce(creation bool, nonce uint64) *types.Transaction {
var tx *types.Transaction
gasPrice := big.NewInt(100 * params.InitialBaseFee)
if creation {
tx, _ = types.SignTx(types.NewContractCreation(b.txPool.Nonce(TestBankAddress), big.NewInt(0), testGas, gasPrice, common.FromHex(testCode)), types.HomesteadSigner{}, testBankKey)
} else {
tx, _ = types.SignTx(types.NewTransaction(nonce, testUserAddress, big.NewInt(1000), params.TxGas, gasPrice, nil), types.HomesteadSigner{}, testBankKey)
}
return tx
}
// newRandomTxWithGas creates a new transaction to deploy a storage smart contract.
func (b *testWorkerBackend) newStorageCreateContractTx() (*types.Transaction, common.Address) {
var tx *types.Transaction
gasPrice := big.NewInt(10 * params.InitialBaseFee)
tx, _ = types.SignTx(types.NewContractCreation(b.txPool.Nonce(TestBankAddress), big.NewInt(0), testGas, gasPrice, common.FromHex(storageContractByteCode)), types.HomesteadSigner{}, testBankKey)
contractAddr := crypto.CreateAddress(TestBankAddress, b.txPool.Nonce(TestBankAddress))
return tx, contractAddr
}
// newStorageContractCallTx creates a new transaction to call a storage smart contract.
func (b *testWorkerBackend) newStorageContractCallTx(to common.Address, nonce uint64) *types.Transaction {
var tx *types.Transaction
gasPrice := big.NewInt(10 * params.InitialBaseFee)
tx, _ = types.SignTx(types.NewTransaction(nonce, to, nil, storageCallTxGas, gasPrice, common.FromHex(storageContractTxCallData)), types.HomesteadSigner{}, testBankKey)
return tx
}
// nolint : paralleltest // nolint : paralleltest
func TestGenerateBlockAndImportEthash(t *testing.T) { func TestGenerateBlockAndImportEthash(t *testing.T) {
testGenerateBlockAndImport(t, false, false) testGenerateBlockAndImport(t, false, false)
@ -615,7 +529,10 @@ func TestGetSealingWorkPostMerge(t *testing.T) {
testGetSealingWork(t, local, ethash.NewFaker()) testGetSealingWork(t, local, ethash.NewFaker())
} }
// nolint:gocognit
func testGetSealingWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { func testGetSealingWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) {
t.Helper()
defer engine.Close() defer engine.Close()
w, b, _ := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0, false, 0, 0) w, b, _ := newTestWorker(t, chainConfig, engine, rawdb.NewMemoryDatabase(), 0, false, 0, 0)

View file

@ -19,7 +19,6 @@ package node
import ( import (
"crypto/ecdsa" "crypto/ecdsa"
"fmt" "fmt"
"github.com/ethereum/go-ethereum/p2p/enode"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
@ -31,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
) )
@ -413,8 +413,9 @@ func (c *Config) parsePersistentNodes(w *bool, path string) []*enode.Node {
log.Error(fmt.Sprintf("Can't load node list file: %v", err)) log.Error(fmt.Sprintf("Can't load node list file: %v", err))
return nil return nil
} }
// Interpret the list as a discovery node array // Interpret the list as a discovery node array
var nodes []*enode.Node nodes := make([]*enode.Node, 0, len(nodelist))
for _, url := range nodelist { for _, url := range nodelist {
if url == "" { if url == "" {

View file

@ -409,7 +409,7 @@ func (n *Node) obtainJWTSecret(cliParam string) ([]byte, error) {
// assumptions about the state of the node. // assumptions about the state of the node.
func (n *Node) startRPC() error { func (n *Node) startRPC() error {
// Filter out personal api // Filter out personal api
var apis []rpc.API apis := make([]rpc.API, 0, len(n.rpcAPIs))
for _, api := range n.rpcAPIs { for _, api := range n.rpcAPIs {
if api.Namespace == "personal" { if api.Namespace == "personal" {

Some files were not shown because too many files have changed in this diff Show more