diff --git a/eth/backend.go b/eth/backend.go index e6f9c05950..db3209aee2 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -101,8 +101,8 @@ type Ethereum struct { shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully } -// New creates a new Ethereum object (including the -// initialisation of the common Ethereum object) +// New creates a new Ethereum object (including the initialisation of the common Ethereum object), +// whose lifecycle will be managed by the provided node. func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { // Ensure configuration values are compatible and sane if config.SyncMode == downloader.LightSync { diff --git a/ethclient/simulated/backend.go b/ethclient/simulated/backend.go index 0c2a0b453c..9d0a434572 100644 --- a/ethclient/simulated/backend.go +++ b/ethclient/simulated/backend.go @@ -62,7 +62,7 @@ type simClient struct { // Backend is a simulated blockchain. You can use it to test your contracts or // other code that interacts with the Ethereum chain. type Backend struct { - eth *eth.Ethereum + node *node.Node beacon *catalyst.SimulatedBeacon client simClient } @@ -129,7 +129,7 @@ func newWithNode(stack *node.Node, conf *eth.Config, blockPeriod uint64) (*Backe return nil, err } return &Backend{ - eth: backend, + node: stack, beacon: beacon, client: simClient{ethclient.NewClient(stack.Attach())}, }, nil @@ -142,12 +142,18 @@ func (n *Backend) Close() error { n.client.Close() n.client = simClient{} } + var rerr error // return only last error if there are multiple if n.beacon != nil { - err := n.beacon.Stop() + rerr = n.beacon.Stop() n.beacon = nil - return err } - return nil + if n.node != nil { + if err := n.node.Close(); err != nil { + rerr = err + } + n.node = nil + } + return rerr } // Commit seals a block and moves the chain forward to a new empty block.