diff --git a/.changeset/eleven-pears-accept.md b/.changeset/eleven-pears-accept.md
new file mode 100644
index 0000000000..e9aa77aea2
--- /dev/null
+++ b/.changeset/eleven-pears-accept.md
@@ -0,0 +1,5 @@
+---
+"@nomicfoundation/hardhat-ethers": patch
+---
+
+Added support for passing bigints as block tags
diff --git a/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts b/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts
index 7289c075c8..19d5a31fe3 100644
--- a/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts
+++ b/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts
@@ -597,6 +597,15 @@ export class HardhatEthersProvider implements ethers.Provider {
       return this.getBlockNumber().then((b) => toQuantity(b + blockTag));
     }
 
+    if (typeof blockTag === "bigint") {
+      if (blockTag >= 0n) {
+        return toQuantity(blockTag);
+      }
+      return this.getBlockNumber().then((b) =>
+        toQuantity(b + Number(blockTag))
+      );
+    }
+
     throw new HardhatEthersError(`Invalid blockTag: ${blockTag}`);
   }
 
diff --git a/packages/hardhat-ethers/test/hardhat-ethers-provider.ts b/packages/hardhat-ethers/test/hardhat-ethers-provider.ts
index 3faa40eaba..ae3878dcf7 100644
--- a/packages/hardhat-ethers/test/hardhat-ethers-provider.ts
+++ b/packages/hardhat-ethers/test/hardhat-ethers-provider.ts
@@ -688,6 +688,43 @@ describe("hardhat ethers provider", function () {
       );
     });
 
+    it("should accept a block number as a bigint", async function () {
+      const signer = await this.env.ethers.provider.getSigner(0);
+      const factory = new this.env.ethers.ContractFactory<[], ExampleContract>(
+        EXAMPLE_CONTRACT.abi,
+        EXAMPLE_CONTRACT.deploymentBytecode,
+        signer
+      );
+      const contract = await factory.deploy();
+      await contract.inc();
+
+      const blockNumber = await this.env.ethers.provider.getBlockNumber();
+
+      const resultAfter = await this.env.ethers.provider.call({
+        from: signer.address,
+        to: contract,
+        data: "0x3fa4f245", // value()
+        blockTag: "latest",
+      });
+
+      assert.strictEqual(
+        resultAfter,
+        "0x0000000000000000000000000000000000000000000000000000000000000001"
+      );
+
+      const resultBefore = await this.env.ethers.provider.call({
+        from: signer.address,
+        to: contract,
+        data: "0x3fa4f245", // value()
+        blockTag: BigInt(blockNumber - 1),
+      });
+
+      assert.strictEqual(
+        resultBefore,
+        "0x0000000000000000000000000000000000000000000000000000000000000000"
+      );
+    });
+
     it("should accept a block hash", async function () {
       const signer = await this.env.ethers.provider.getSigner(0);
       const factory = new this.env.ethers.ContractFactory<[], ExampleContract>(