diff --git a/eth/api.go b/eth/api.go
index 6a22c9e41680d7479c38243bab12a62ea8e453e2..8b96d1f316d79482347a43110a24c5d41e347570 100644
--- a/eth/api.go
+++ b/eth/api.go
@@ -129,6 +129,12 @@ func (api *PrivateMinerAPI) SetGasPrice(gasPrice hexutil.Big) bool {
 	return true
 }
 
+// SetGasLimit sets the gaslimit to target towards during mining.
+func (api *PrivateMinerAPI) SetGasLimit(gasLimit hexutil.Uint64) bool {
+	api.e.Miner().SetGasCeil(uint64(gasLimit))
+	return true
+}
+
 // SetEtherbase sets the etherbase of the miner
 func (api *PrivateMinerAPI) SetEtherbase(etherbase common.Address) bool {
 	api.e.SetEtherbase(etherbase)
diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go
index a7b326692186edc794063089bbb91d1a66398790..9f9b2ba35e5350eca51700bb5bce3669561c7178 100644
--- a/internal/web3ext/web3ext.go
+++ b/internal/web3ext/web3ext.go
@@ -641,6 +641,12 @@ web3._extend({
 			params: 1,
 			inputFormatter: [web3._extend.utils.fromDecimal]
 		}),
+		new web3._extend.Method({
+			name: 'setGasLimit',
+			call: 'miner_setGasLimit',
+			params: 1,
+			inputFormatter: [web3._extend.utils.fromDecimal]
+		}),
 		new web3._extend.Method({
 			name: 'setRecommitInterval',
 			call: 'miner_setRecommitInterval',
diff --git a/miner/miner.go b/miner/miner.go
index 7143679269512f78192834a07e11e2ce5ce4c516..a4a01b9f4ff708aa339997c75bcb69e3278e920b 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -204,6 +204,12 @@ func (miner *Miner) SetEtherbase(addr common.Address) {
 	miner.worker.setEtherbase(addr)
 }
 
+// SetGasCeil sets the gaslimit to strive for when mining blocks post 1559.
+// For pre-1559 blocks, it sets the ceiling.
+func (miner *Miner) SetGasCeil(ceil uint64) {
+	miner.worker.setGasCeil(ceil)
+}
+
 // EnablePreseal turns on the preseal mining feature. It's enabled by default.
 // Note this function shouldn't be exposed to API, it's unnecessary for users
 // (miners) to actually know the underlying detail. It's only for outside project
diff --git a/miner/worker.go b/miner/worker.go
index 05dcc3650659348e875830c2dd27c061a9b0fe18..457f329153e15b784e646063bcbfba3eec92a336 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -244,6 +244,12 @@ func (w *worker) setEtherbase(addr common.Address) {
 	w.coinbase = addr
 }
 
+func (w *worker) setGasCeil(ceil uint64) {
+	w.mu.Lock()
+	defer w.mu.Unlock()
+	w.config.GasCeil = ceil
+}
+
 // setExtra sets the content used to initialize the block extra field.
 func (w *worker) setExtra(extra []byte) {
 	w.mu.Lock()