diff --git a/packages/providers/src.ts/base-provider.ts b/packages/providers/src.ts/base-provider.ts index 516456922c..41433bd635 100644 --- a/packages/providers/src.ts/base-provider.ts +++ b/packages/providers/src.ts/base-provider.ts @@ -619,8 +619,19 @@ export class BaseProvider extends Provider { } _getBlock(blockHashOrBlockTag: BlockTag | string | Promise, includeTransactions?: boolean): Promise { + if (blockHashOrBlockTag instanceof Promise) { + return blockHashOrBlockTag.then((b) => this._getBlock(b, includeTransactions)); + } + return this.ready.then(() => { - return this._getBlockTag(blockHashOrBlockTag).then((blockHashOrBlockTag) => { + let blockHashOrBlockTagPromise: Promise = null; + if (isHexString(blockHashOrBlockTag, 32)) { + blockHashOrBlockTagPromise = Promise.resolve(blockHashOrBlockTag); + } else { + blockHashOrBlockTagPromise = this._getBlockTag(blockHashOrBlockTag); + } + + return blockHashOrBlockTagPromise.then((blockHashOrBlockTag) => { let params: { [key: string]: any } = { includeTransactions: !!includeTransactions }; diff --git a/packages/tests/src.ts/test-providers.ts b/packages/tests/src.ts/test-providers.ts index 1411d3d463..3cfee58b96 100644 --- a/packages/tests/src.ts/test-providers.ts +++ b/packages/tests/src.ts/test-providers.ts @@ -507,3 +507,16 @@ describe("Test Basic Authentication", function() { }, "throws an exception for insecure connections"); }) }); + +describe("Test #629", function() { + it("Fetches a blockhash beginning with a 0 nibble", function() { + const provider = new ethers.providers.InfuraProvider('goerli'); + return provider.getBlock('0x0f305466552efa183a0de26b6fda26d55a872dbc02aca8b5852cc2a361ce9ee4').then((block) => { + assert.equal(block.parentHash, "0x6723e880e01c15c5ac894abcae0f5b55ea809a31eaf5618998928f7d9cbc5118"); + assert.equal(block.number, 1479831); + assert.equal(block.transactions.length, 5); + }, (error) => { + assert.ok(false, "Failed to get block"); + }); + }); +});