github.com/MetalBlockchain/subnet-evm@v0.4.9/node/node.go (about) 1 // (c) 2019-2020, Ava Labs, Inc. 2 // 3 // This file is a derived work, based on the go-ethereum library whose original 4 // notices appear below. 5 // 6 // It is distributed under a license compatible with the licensing terms of the 7 // original code from which it is derived. 8 // 9 // Much love to the original authors for their work. 10 // ********** 11 // Copyright 2015 The go-ethereum Authors 12 // This file is part of the go-ethereum library. 13 // 14 // The go-ethereum library is free software: you can redistribute it and/or modify 15 // it under the terms of the GNU Lesser General Public License as published by 16 // the Free Software Foundation, either version 3 of the License, or 17 // (at your option) any later version. 18 // 19 // The go-ethereum library is distributed in the hope that it will be useful, 20 // but WITHOUT ANY WARRANTY; without even the implied warranty of 21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 // GNU Lesser General Public License for more details. 23 // 24 // You should have received a copy of the GNU Lesser General Public License 25 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 26 27 package node 28 29 import ( 30 "github.com/MetalBlockchain/subnet-evm/accounts" 31 "github.com/MetalBlockchain/subnet-evm/rpc" 32 ) 33 34 // Node is a container on which services can be registered. 35 type Node struct { 36 config *Config 37 accman *accounts.Manager 38 39 subnetEVMVersion string 40 } 41 42 // New creates a new P2P node, ready for protocol registration. 43 func New(conf *Config) (*Node, error) { 44 // Copy config and resolve the datadir so future changes to the current 45 // working directory don't affect the node. 46 confCopy := *conf 47 conf = &confCopy 48 49 node := &Node{config: conf} 50 51 // Ensure that the AccountManager method works before the node has started. We rely on 52 // this in cmd/geth. 53 am, err := makeAccountManager(conf) 54 if err != nil { 55 return nil, err 56 } 57 node.accman = am 58 59 return node, nil 60 } 61 62 // Config returns the configuration of node. 63 func (n *Node) Config() *Config { 64 return n.config 65 } 66 67 // AccountManager retrieves the account manager used by the protocol stack. 68 func (n *Node) AccountManager() *accounts.Manager { 69 return n.accman 70 } 71 72 // RegisterAPIs registers the APIs a service provides on the node. 73 func (n *Node) APIs() []rpc.API { 74 return n.apis() 75 }