diff --git a/command/server/chains/mainnet.go b/command/server/chains/mainnet.go
index 8d6f163256b6283938fc18e2ad0d988067918edd..ac074ed8cb0407635be6543556aac07ff0639e35 100644
--- a/command/server/chains/mainnet.go
+++ b/command/server/chains/mainnet.go
@@ -53,7 +53,7 @@ var mainnetBor = &Chain{
 		Difficulty: big.NewInt(1),
 		Mixhash:    common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"),
 		Coinbase:   common.HexToAddress("0x0000000000000000000000000000000000000000"),
-		Alloc:      readPrealloc("allocs/bor_mainnet.json"),
+		Alloc:      readPrealloc("allocs/mainnet.json"),
 	},
 	Bootnodes: []string{
 		"enode://0cb82b395094ee4a2915e9714894627de9ed8498fb881cec6db7c65e8b9a5bd7f2f25cc84e71e89d0947e51c76e85d0847de848c7782b13c0255247a6758178c@44.232.55.71:30303",
diff --git a/command/server/command.go b/command/server/command.go
index 2feb0be79115356ca8cebde623f7109f07aba276..59c106fea21bb11546e462b19796b33663cbd090 100644
--- a/command/server/command.go
+++ b/command/server/command.go
@@ -88,7 +88,6 @@ func (c *Command) Run(args []string) int {
 	// TODO: Metrics
 	// TODO: apis
 	// TODO: Graphql
-	// TODO: embed
 
 	// register the ethereum backend
 	ethCfg, err := config.buildEth()
@@ -143,6 +142,7 @@ func (c *Command) setupMetrics() error {
 
 	// Start system runtime metrics collection
 	go metrics.CollectProcessMetrics(3 * time.Second)
+
 	return nil
 }
 
diff --git a/command/server/config.go b/command/server/config.go
index 7b01f6885f18b1d8471e73ea47a9150b8ce6aea6..c8dd5c27c5df0f3e2d6d89d753f6da4ab1604f02 100644
--- a/command/server/config.go
+++ b/command/server/config.go
@@ -3,6 +3,7 @@ package server
 import (
 	"crypto/ecdsa"
 	"fmt"
+	"io/ioutil"
 	"math/big"
 	"os"
 	"path/filepath"
@@ -50,6 +51,7 @@ type Config struct {
 	EthStats *string
 	TxPool   *TxPoolConfig
 	Sealer   *SealerConfig
+	JsonRPC  *JsonRPCConfig
 }
 
 type P2PConfig struct {
@@ -92,6 +94,9 @@ type SealerConfig struct {
 	GasPrice  *big.Int
 }
 
+type JsonRPCConfig struct {
+}
+
 func DefaultConfig() *Config {
 	return &Config{
 		Chain:    stringPtr("mainnet"),
@@ -137,7 +142,18 @@ func DefaultConfig() *Config {
 }
 
 func readConfigFile(path string) (*Config, error) {
-	return nil, nil
+	data, err := ioutil.ReadFile(path)
+	if err != nil {
+		return nil, err
+	}
+	// TODO: Use hcl as config format
+	ext := filepath.Ext(path)
+	switch ext {
+	case ".toml":
+		return readLegacyConfig(data)
+	default:
+		return nil, fmt.Errorf("file path extension '%s' not found", ext)
+	}
 }
 
 func (c *Config) loadChain() error {
@@ -219,6 +235,7 @@ func (c *Config) buildNode() (*node.Config, error) {
 		Name:    clientIdentifier,
 		DataDir: *c.DataDir,
 		Version: params.VersionWithCommit(gitCommit, gitDate),
+		IPCPath: clientIdentifier + ".ipc",
 		P2P: p2p.Config{
 			MaxPeers:   int(*c.P2P.MaxPeers),
 			ListenAddr: *c.P2P.Bind + ":" + strconv.Itoa(int(*c.P2P.Port)),
diff --git a/command/server/config_legacy.go b/command/server/config_legacy.go
new file mode 100644
index 0000000000000000000000000000000000000000..0d96b2e023f9b058d01d883aba785aa333d6e353
--- /dev/null
+++ b/command/server/config_legacy.go
@@ -0,0 +1,33 @@
+package server
+
+import (
+	"bytes"
+
+	"github.com/naoina/toml"
+)
+
+type legacyConfig struct {
+	Node struct {
+		P2P struct {
+			StaticNodes  []string
+			TrustedNodes []string
+		}
+	}
+}
+
+func (l *legacyConfig) Config() *Config {
+	c := DefaultConfig()
+	c.P2P.Discovery.StaticNodes = l.Node.P2P.StaticNodes
+	c.P2P.Discovery.TrustedNodes = l.Node.P2P.TrustedNodes
+	return c
+}
+
+func readLegacyConfig(data []byte) (*Config, error) {
+	var legacy legacyConfig
+
+	r := toml.NewDecoder(bytes.NewReader(data))
+	if err := r.Decode(&legacy); err != nil {
+		return nil, err
+	}
+	return legacy.Config(), nil
+}
diff --git a/command/server/config_legacy_test.go b/command/server/config_legacy_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..399481fc9bcd14e50bb362e3ce0a4d9dae85ba18
--- /dev/null
+++ b/command/server/config_legacy_test.go
@@ -0,0 +1,21 @@
+package server
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestConfigLegacy(t *testing.T) {
+	toml := `[Node.P2P]
+StaticNodes = ["node1"]
+TrustedNodes = ["node2"]`
+
+	config, err := readLegacyConfig([]byte(toml))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	assert.Equal(t, config.P2P.Discovery.StaticNodes, []string{"node1"})
+	assert.Equal(t, config.P2P.Discovery.TrustedNodes, []string{"node2"})
+}
diff --git a/go.mod b/go.mod
index 296d727ec4a41f9232137e4f1a3b271aa29ea07f..dfc33fc8c752b5260165438cb00603213bd7b7f3 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/ethereum/go-ethereum
 
-go 1.15
+go 1.16
 
 require (
 	github.com/Azure/azure-pipeline-go v0.2.2 // indirect