diff --git a/packages/core/src/internal/execution/jsonrpc-client.ts b/packages/core/src/internal/execution/jsonrpc-client.ts
index 59d336d59..10a427818 100644
--- a/packages/core/src/internal/execution/jsonrpc-client.ts
+++ b/packages/core/src/internal/execution/jsonrpc-client.ts
@@ -640,6 +640,15 @@ export class EIP1193JsonRpcClient implements JsonRpcClient {
     // We prioritize EIP-1559 fees over legacy gasPrice fees, however,
     // polygon (chainId 137) requires legacy gasPrice fees so we skip EIP-1559 logic in that case
     if (latestBlock.baseFeePerGas !== undefined && chainId !== 137) {
+      if (latestBlock.baseFeePerGas === 0n) {
+        // Support zero gas fee chains, such as a private instances
+        // of blockchains using Besu.
+        return {
+          maxFeePerGas: 0n,
+          maxPriorityFeePerGas: 0n,
+        };
+      }
+
       const maxPriorityFeePerGas = await this._resolveMaxFeePerGas();
 
       // Logic copied from ethers v6
diff --git a/packages/core/test-integrations/new-api/internal/new-execution/jsonrpc-client.ts b/packages/core/test-integrations/new-api/internal/new-execution/jsonrpc-client.ts
index c27bfdc56..83d4a19ee 100644
--- a/packages/core/test-integrations/new-api/internal/new-execution/jsonrpc-client.ts
+++ b/packages/core/test-integrations/new-api/internal/new-execution/jsonrpc-client.ts
@@ -154,6 +154,37 @@ describe("JSON-RPC client", function () {
           assert.equal(fees.gasPrice, 1n);
         });
 
+        it("Should return zero gas fees when deploying to a network with a zero base fee per gas (e.g. private Besu instances)", async function () {
+          const besuClient = new EIP1193JsonRpcClient({
+            request: async (req) => {
+              if (req.method === "eth_chainId") {
+                return "0x42";
+              }
+
+              if (req.method === "eth_getBlockByNumber") {
+                return {
+                  number: "0x0",
+                  hash: "0x0",
+                  baseFeePerGas: "0x0", // Set the base fee to zero
+                };
+              }
+
+              if (req.method === "eth_gasPrice") {
+                return "0x1";
+              }
+
+              throw new Error(`Unimplemented mock for ${req.method}`);
+            },
+          });
+
+          const fees = await besuClient.getNetworkFees();
+
+          assert.deepStrictEqual(fees, {
+            maxFeePerGas: 0n,
+            maxPriorityFeePerGas: 0n,
+          });
+        });
+
         it("Should use the `maxPriorityFeePerGas` from the node if `eth_maxPriorityFeePerGas` is present (and there is no config)", async function () {
           // TODO: Hardhat does not support `eth_maxPriorityFeePerGas` yet, when it does, this
           // can be removed.