diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go
index 12244132e64bd0a5f105fd23b965c6f758299437..8f5d35643a94b0c5540f772d600ae06e3770d7b6 100644
--- a/cmd/integration/commands/stages.go
+++ b/cmd/integration/commands/stages.go
@@ -924,6 +924,9 @@ func byChain() (*core.Genesis, *params.ChainConfig) {
 	case params.SokolChainName:
 		chainConfig = params.SokolChainConfig
 		genesis = core.DefaultSokolGenesisBlock()
+	case params.KovanChainName:
+		chainConfig = params.KovanChainConfig
+		genesis = core.DefaultKovanGenesisBlock()
 	}
 	return genesis, chainConfig
 }
@@ -953,7 +956,7 @@ func newSync(ctx context.Context, db kv.RwDB, miningConfig *params.MiningConfig)
 	var engine consensus.Engine
 	engine = ethash.NewFaker()
 	switch chain {
-	case params.SokolChainName:
+	case params.SokolChainName, params.KovanChainName:
 		engine = ethconfig.CreateConsensusEngine(chainConfig, logger, &params.AuRaConfig{DBPath: path.Join(datadir, "aura")}, nil, false)
 	}
 
diff --git a/cmd/sentry/download/sentry.go b/cmd/sentry/download/sentry.go
index 20022057300b67b39b116cb307d0ae2f6f019db8..28edf846eb930bc85cd939698e03d3fcf3370fba 100644
--- a/cmd/sentry/download/sentry.go
+++ b/cmd/sentry/download/sentry.go
@@ -122,6 +122,8 @@ func makeP2PServer(
 		urls = params.RinkebyBootnodes
 	case params.SokolGenesisHash:
 		urls = params.SokolBootnodes
+	case params.KovanGenesisHash:
+		urls = params.KovanBootnodes
 	}
 	p2pConfig.BootstrapNodes = make([]*enode.Node, 0, len(urls))
 	for _, url := range urls {
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index ee8ad576473d3214e86ef53e8d50e98b0c35fde0..2b87de396c2389c7da197eb23ce6973496b9d9e0 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -599,6 +599,8 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
 			urls = params.ErigonBootnodes
 		case params.SokolChainName:
 			urls = params.SokolBootnodes
+		case params.KovanChainName:
+			urls = params.KovanBootnodes
 		default:
 			if cfg.BootstrapNodes != nil {
 				return // already set, don't apply defaults.
@@ -639,6 +641,8 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) {
 			urls = params.ErigonBootnodes
 		case params.SokolChainName:
 			urls = params.SokolBootnodes
+		case params.KovanChainName:
+			urls = params.KovanBootnodes
 		default:
 			if cfg.BootstrapNodesV5 != nil {
 				return // already set, don't apply defaults.
@@ -869,6 +873,8 @@ func DataDirForNetwork(datadir string, network string) string {
 		filepath.Join(datadir, "goerli")
 	case params.SokolChainName:
 		return filepath.Join(datadir, "sokol")
+	case params.KovanChainName:
+		return filepath.Join(datadir, "kovan")
 	default:
 		return datadir
 	}
@@ -1242,6 +1248,11 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *node.Config, cfg *ethconfig.Conf
 			cfg.NetworkID = 77
 		}
 		cfg.Genesis = core.DefaultSokolGenesisBlock()
+	case params.KovanChainName:
+		if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
+			cfg.NetworkID = 42
+		}
+		cfg.Genesis = core.DefaultKovanGenesisBlock()
 	case params.DevChainName:
 		if !ctx.GlobalIsSet(NetworkIdFlag.Name) {
 			cfg.NetworkID = 1337
@@ -1315,6 +1326,8 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis {
 		genesis = core.DefaultErigonGenesisBlock()
 	case params.SokolChainName:
 		genesis = core.DefaultSokolGenesisBlock()
+	case params.KovanChainName:
+		genesis = core.DefaultKovanGenesisBlock()
 	case params.DevChainName:
 		Fatalf("Developer chains are ephemeral")
 	}
diff --git a/consensus/aura/consensusconfig/embed.go b/consensus/aura/consensusconfig/embed.go
index 2ab017dd741232563fa9d686ab64dc3a64c0f64a..883c4c3d04e2ebb9d3e7ac52b2f4662e669f03a0 100644
--- a/consensus/aura/consensusconfig/embed.go
+++ b/consensus/aura/consensusconfig/embed.go
@@ -2,7 +2,22 @@ package consensusconfig
 
 import (
 	_ "embed"
+	"github.com/ledgerwatch/erigon/params"
 )
 
 //go:embed poasokol.json
 var Sokol []byte
+
+//go:embed kovan.json
+var Kovan []byte
+
+func GetConfigByChain(chainName string) []byte {
+	switch chainName {
+	case params.SokolChainName:
+		return Sokol
+	case params.KovanChainName:
+		return Kovan
+	default:
+		return Sokol
+	}
+}
diff --git a/consensus/aura/consensusconfig/kovan.json b/consensus/aura/consensusconfig/kovan.json
new file mode 100644
index 0000000000000000000000000000000000000000..603a5fbdd3140e8a1d9f04af248f1ebb6e127172
--- /dev/null
+++ b/consensus/aura/consensusconfig/kovan.json
@@ -0,0 +1,36 @@
+{
+  "stepDuration": 4,
+  "blockReward": "0x4563918244F40000",
+  "validators": {
+    "multi": {
+      "0": {
+        "list": [
+          "0x00D6Cc1BA9cf89BD2e58009741f4F7325BAdc0ED",
+          "0x00427feae2419c15b89d1c21af10d1b6650a4d3d",
+          "0x4Ed9B08e6354C70fE6F8CB0411b0d3246b424d6c",
+          "0x0020ee4Be0e2027d76603cB751eE069519bA81A1",
+          "0x0010f94b296a852aaac52ea6c5ac72e03afd032d",
+          "0x007733a1FE69CF3f2CF989F81C7b4cAc1693387A",
+          "0x00E6d2b931F55a3f1701c7389d592a7778897879",
+          "0x00e4a10650e5a6D6001C38ff8E64F97016a1645c",
+          "0x00a0a24b9f0e5ec7aa4c7389b8302fd0123194de"
+        ]
+      },
+      "10960440": {
+        "list": [
+          "0x00D6Cc1BA9cf89BD2e58009741f4F7325BAdc0ED",
+          "0x0010f94b296a852aaac52ea6c5ac72e03afd032d",
+          "0x00a0a24b9f0e5ec7aa4c7389b8302fd0123194de"
+        ]
+      },
+      "10960500": {
+        "safeContract": "0xaE71807C1B0a093cB1547b682DC78316D945c9B8"
+      }
+    }
+  },
+  "validateScoreTransition": 4301764,
+  "validateStepTransition": 1500000,
+  "maximumUncleCountTransition": 5067000,
+  "maximumUncleCount": 0
+}
+
diff --git a/core/allocs/kovan.json b/core/allocs/kovan.json
new file mode 100644
index 0000000000000000000000000000000000000000..1821842a5631b68d32f81a1d7d8252427e69f69e
--- /dev/null
+++ b/core/allocs/kovan.json
@@ -0,0 +1,17 @@
+{
+  "0x0000000000000000000000000000000000000001": {
+    "balance": "0x1"
+  },
+  "0x0000000000000000000000000000000000000002": {
+    "balance": "0x1"
+  },
+  "0x0000000000000000000000000000000000000003": {
+    "balance": "0x1"
+  },
+  "0x0000000000000000000000000000000000000004": {
+    "balance": "0x1"
+  },
+  "0x00521965e7bd230323c423d96c657db5b79d099f": {
+    "balance": "1606938044258990275541962092341162602522202993782792835301376"
+  }
+}
\ No newline at end of file
diff --git a/core/genesis.go b/core/genesis.go
index aac7f713bca08a608aaab9f2bd4e2e3c799a7c48..e52eddf006d9cdf1455c74200ce2a101dde653ad 100644
--- a/core/genesis.go
+++ b/core/genesis.go
@@ -307,6 +307,8 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig {
 		return params.ErigonChainConfig
 	case ghash == params.SokolGenesisHash:
 		return params.SokolChainConfig
+	case ghash == params.KovanGenesisHash:
+		return params.KovanChainConfig
 	default:
 		return params.AllEthashProtocolChanges
 	}
@@ -601,6 +603,24 @@ func DefaultSokolGenesisBlock() *Genesis {
 	}
 }
 
+func DefaultKovanGenesisBlock() *Genesis {
+	sealRlp, err := rlp.EncodeToBytes([][]byte{
+		common.FromHex(""),
+		common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+	})
+	if err != nil {
+		panic(err)
+	}
+	return &Genesis{
+		Config:     params.KovanChainConfig,
+		Timestamp:  0x0,
+		SealRlp:    sealRlp,
+		GasLimit:   0x5B8D80,
+		Difficulty: big.NewInt(0x20000),
+		Alloc:      readPrealloc("allocs/kovan.json"),
+	}
+}
+
 // Pre-calculated version of:
 //    DevnetSignPrivateKey = crypto.HexToECDSA(sha256.Sum256([]byte("erigon devnet key")))
 //    DevnetEtherbase=crypto.PubkeyToAddress(DevnetSignPrivateKey.PublicKey)
diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go
index a116e27d48dea398ab59f4c5d41e798fa1255547..c3186024cba50a332845345862fb42e79cb9ac34 100644
--- a/eth/ethconfig/config.go
+++ b/eth/ethconfig/config.go
@@ -214,7 +214,7 @@ func CreateConsensusEngine(chainConfig *params.ChainConfig, logger log.Logger, c
 	case *params.AuRaConfig:
 		if chainConfig.Aura != nil {
 			var err error
-			eng, err = aura.NewAuRa(chainConfig.Aura, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory), chainConfig.Aura.Etherbase, consensusconfig.Sokol)
+			eng, err = aura.NewAuRa(chainConfig.Aura, db.OpenDatabase(consensusCfg.DBPath, logger, consensusCfg.InMemory), chainConfig.Aura.Etherbase, consensusconfig.GetConfigByChain(chainConfig.ChainName))
 			if err != nil {
 				panic(err)
 			}
diff --git a/params/bootnodes.go b/params/bootnodes.go
index 6806fc01bc61b38d070f330c4482486663a840f4..9328d8d6994107890d3223a867b772a31de9e426 100644
--- a/params/bootnodes.go
+++ b/params/bootnodes.go
@@ -77,6 +77,12 @@ var SokolBootnodes = []string{
 	"enode://f11a0f80939b49a28bf99581da9b351a592ec1504b9d32a7dfda79b36510a891e96631239c4166e5c73368c21e9bb3241e7fd6929b899772e5a8fe9a7b7c3af6@45.77.52.149:30303",
 }
 
+var KovanBootnodes = []string{
+	"enode://30499bde23362f7d310a34518a2a6ff765921870bf0c3e63d21153cfa7ba9cf39cc7c8e54e9dad2f2b3c07288b3e91b220656833cc2d843a54875c229f3f959a@8.9.8.175:30303",
+	"enode://16898006ba2cd4fa8bf9a3dfe32684c178fa861df144bfc21fe800dc4838a03e342056951fa9fd533dcb0be1219e306106442ff2cf1f7e9f8faa5f2fc1a3aa45@116.203.116.241:30303",
+	"enode://49a0e1aa38caa12cbf31222cb4e31cef1e8794cb4dd38012f84498ac867b19584e29bbf6d53201d7dfd3b5eb0998a4d908d096ed4ddb5f9102c623852cd331ec@54.87.247.5:30303",
+}
+
 var V5Bootnodes = []string{
 	// Teku team's bootnode
 	"enr:-KG4QOtcP9X1FbIMOe17QNMKqDxCpm14jcX5tiOE4_TyMrFqbmhPZHK_ZPG2Gxb1GE2xdtodOfx9-cgvNtxnRyHEmC0ghGV0aDKQ9aX9QgAAAAD__________4JpZIJ2NIJpcIQDE8KdiXNlY3AyNTZrMaEDhpehBDbZjM_L9ek699Y7vhUJ-eAdMyQW_Fil522Y0fODdGNwgiMog3VkcIIjKA",
diff --git a/params/config.go b/params/config.go
index 97e16c0cf71f0ae0f961e822523bb79ac492535a..56e36ce9b682a624d25f9696b19b479db9d0dd22 100644
--- a/params/config.go
+++ b/params/config.go
@@ -33,6 +33,7 @@ const (
 	DevChainName     = "dev"
 	ErigonMineName   = "erigonmine"
 	SokolChainName   = "sokol"
+	KovanChainName   = "kovan"
 )
 
 // Genesis hashes to enforce below configs on.
@@ -43,6 +44,7 @@ var (
 	GoerliGenesisHash  = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a")
 	ErigonGenesisHash  = common.HexToHash("0xfecd5c85712e36f30f09ba3a42386b42c46b5ba5395a4246b952e655f9aa0f58")
 	SokolGenesisHash   = common.HexToHash("0x5b28c1bfd3a15230c9a46b399cd0f9a6920d432e85381cc6a140b06e8410112f")
+	KovanGenesisHash   = common.HexToHash("0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9")
 )
 
 var (
@@ -51,6 +53,7 @@ var (
 
 var (
 	SokolGenesisStateRoot = common.HexToHash("0xfad4af258fd11939fae0c6c6eec9d340b1caac0b0196fd9a1bc3f489c5bf00b3")
+	KovanGenesisStateRoot = common.HexToHash("0x2480155b48a1cea17d67dbfdfaafe821c1d19cdd478c5358e8ec56dec24502b2")
 )
 
 var (
@@ -225,6 +228,26 @@ var (
 		Aura:          &AuRaConfig{},
 	}
 
+	KovanChainConfig = &ChainConfig{
+		ChainName:           KovanChainName,
+		ChainID:             big.NewInt(42),
+		HomesteadBlock:      big.NewInt(0),
+		DAOForkBlock:        nil,
+		DAOForkSupport:      false,
+		EIP150Block:         big.NewInt(0),
+		EIP155Block:         big.NewInt(0),
+		EIP158Block:         big.NewInt(0),
+		ByzantiumBlock:      big.NewInt(5067000),
+		ConstantinopleBlock: big.NewInt(9200000),
+		PetersburgBlock:     big.NewInt(10255201),
+		IstanbulBlock:       big.NewInt(14111141),
+		MuirGlacierBlock:    nil,
+		BerlinBlock:         big.NewInt(24770900),
+		LondonBlock:         big.NewInt(26741100),
+		CatalystBlock:       nil,
+		Aura:                &AuRaConfig{},
+	}
+
 	// AllEthashProtocolChanges contains every protocol change (EIPs) introduced
 	// and accepted by the Ethereum core developers into the Ethash consensus.
 	//
diff --git a/turbo/stages/genesis_test.go b/turbo/stages/genesis_test.go
index 2b166f0010c3b7efac44f1ad59628668d00d2c4c..b9c3fdcef47196b04b6b48b3542652574844a07a 100644
--- a/turbo/stages/genesis_test.go
+++ b/turbo/stages/genesis_test.go
@@ -60,6 +60,17 @@ func TestDefaultGenesisBlock(t *testing.T) {
 	if block.Hash() != params.SokolGenesisHash {
 		t.Errorf("wrong sokol genesis hash, got %v, want %v", block.Hash(), params.SokolGenesisHash)
 	}
+
+	block, _, err = core.DefaultKovanGenesisBlock().ToBlock()
+	if err != nil {
+		t.Errorf("error: %w", err)
+	}
+	if block.Root() != params.KovanGenesisStateRoot {
+		t.Errorf("wrong kovan genesis state root, got %v, want %v", block.Root(), params.KovanGenesisStateRoot)
+	}
+	if block.Hash() != params.KovanGenesisHash {
+		t.Errorf("wrong kovan genesis hash, got %v, want %v", block.Hash(), params.KovanGenesisHash)
+	}
 }
 
 func TestSokolHeaderRLP(t *testing.T) {