diff --git a/packages/providers/src.ts/formatter.ts b/packages/providers/src.ts/formatter.ts index c7cf69f80..ec4e37a44 100644 --- a/packages/providers/src.ts/formatter.ts +++ b/packages/providers/src.ts/formatter.ts @@ -36,17 +36,17 @@ export class Formatter { } getDefaultFormats(): Formats { - let formats: Formats = ({ }); + const formats: Formats = ({ }); - let address = this.address.bind(this); - let bigNumber = this.bigNumber.bind(this); - let blockTag = this.blockTag.bind(this); - let data = this.data.bind(this); - let hash = this.hash.bind(this); - let hex = this.hex.bind(this); - let number = this.number.bind(this); + const address = this.address.bind(this); + const bigNumber = this.bigNumber.bind(this); + const blockTag = this.blockTag.bind(this); + const data = this.data.bind(this); + const hash = this.hash.bind(this); + const hex = this.hex.bind(this); + const number = this.number.bind(this); - let strictData = (v: any) => { return this.data(v, true); }; + const strictData = (v: any) => { return this.data(v, true); }; formats.transaction = { hash: hash, @@ -195,7 +195,7 @@ export class Formatter { } data(value: any, strict?: boolean): string { - let result = this.hex(value, strict); + const result = this.hex(value, strict); if ((result.length % 2) !== 0) { throw new Error("invalid data; odd-length - " + value); } @@ -210,7 +210,7 @@ export class Formatter { callAddress(value: any): string { if (!isHexString(value, 32)) { return null; } - let address = getAddress(hexDataSlice(value, 12)); + const address = getAddress(hexDataSlice(value, 12)); return (address === AddressZero) ? null: address; } @@ -237,7 +237,7 @@ export class Formatter { // Requires a hash, optionally requires 0x prefix; returns prefixed lowercase hash. hash(value: any, strict?: boolean): string { - let result = this.hex(value, strict); + const result = this.hex(value, strict); if (hexDataLength(result) !== 32) { return logger.throwArgumentError("invalid hash", "value", value); } @@ -246,7 +246,9 @@ export class Formatter { // Returns the difficulty as a number, or if too large (i.e. PoA network) null difficulty(value: any): number { - let v = BigNumber.from(value); + if (value == null) { return null; } + + const v = BigNumber.from(value); try { return v.toNumber(); @@ -328,7 +330,7 @@ export class Formatter { } */ - let result: TransactionResponse = Formatter.check(this.formats.transaction, transaction); + const result: TransactionResponse = Formatter.check(this.formats.transaction, transaction); if (transaction.chainId != null) { let chainId = transaction.chainId; @@ -382,7 +384,7 @@ export class Formatter { //let status = transactionReceipt.status; //let root = transactionReceipt.root; - let result: TransactionReceipt = Formatter.check(this.formats.receipt, value); + const result: TransactionReceipt = Formatter.check(this.formats.receipt, value); result.logs.forEach((entry, index) => { if (entry.transactionLogIndex == null) { entry.transactionLogIndex = index; @@ -414,10 +416,10 @@ export class Formatter { } static check(format: { [ name: string ]: FormatFunc }, object: any): any { - let result: any = {}; - for (let key in format) { + const result: any = {}; + for (const key in format) { try { - let value = format[key](object[key]); + const value = format[key](object[key]); if (value !== undefined) { result[key] = value; } } catch (error) { error.checkKey = key; @@ -449,7 +451,7 @@ export class Formatter { return (function(array: any): Array { if (!Array.isArray(array)) { throw new Error("not an array"); } - let result: any = []; + const result: any = []; array.forEach(function(value) { result.push(format(value)); diff --git a/packages/tests/src.ts/test-providers.ts b/packages/tests/src.ts/test-providers.ts index 4c04f7213..1a9fd6afa 100644 --- a/packages/tests/src.ts/test-providers.ts +++ b/packages/tests/src.ts/test-providers.ts @@ -120,7 +120,7 @@ const blockchainData: any = { balance: bnify("997787946734641021") }, block3: { - hash: "0xf0ec9bf41b99a6bd1f6cd29f91302f71a1a82d14634d2e207edea4b7962f3676", + hash: "0xf0ec9bf41b99a6bd1f6cd29f91302f71a1a82d14634d2e207edea4b7962f3676", parentHash: "0xf110ecd84454f116e2222378e7bca81ac3e59be0dac96d7ec56d5ef1c3bc1d64", number: 3, timestamp: 1488459452, @@ -131,6 +131,25 @@ const blockchainData: any = { extraData: "0xd5830105048650617269747986312e31352e31826c69", transactions: [] }, + // See: #711 + block16265864: { + hash: "0xd92891a6eeaed4892289edf9bd5ebff261da5c6a51f7131cc1a481c6f4d1aa75", + parentHash: "0xcc769a02513be1df80eee7d3a5cb87f14f37baee03c13f3e3ad1e7bdcaf7dac3", + number: 16265864, + timestamp: 1579621004, + difficulty: null, + gasLimit: bnify("0x989680"), + gasUsed: bnify("0x0705bf"), + miner: "0x596e8221A30bFe6e7eFF67Fee664A01C73BA3C56", + extraData: "0xde830206088f5061726974792d457468657265756d86312e34302e30826c69", + transactions: [ + "0x20e6760fa1297fb06c8c20e6ed99581e0ba964d51167ea3c8ff580bfcb10bfc3", + "0x0ce7eba48b1bbdee05823b79ae24e741f3f290d0abfef8ae9adf32db108b7dd6", + "0x1fa2baafa844bf4853e4abbbf49532bf570210d589dc626dbf7ebc4832bdfa5d", + "0xdb5d1fa54d30a4b6aee0b242a2c68ea52d3dd28703f69e6e30871827850aa2fa", + "0xcc898db85d7d2493d4778faf640be32a4a3b7f5f987257bdc0009ce75a18eeaa" + ] + }, }, rinkeby: { balance: { @@ -327,6 +346,22 @@ function testProvider(providerName: string, networkName: string) { }); }); + // Kovan Test Case: See #711 + if (blockchainData[networkName].block16265864) { + it("fetches block #16265864", function() { + this.timeout(20000); + let test = blockchainData[networkName].block16265864; + return provider.getBlock(16265864).then((block) => { + for (let key in test) { + equals("Block " + key, (block)[key], test[key]); + } + }, (error) => { + console.log("Error", error); + assert.ok(false); + }); + }); + } + it("fetches address balance", function() { // @TODO: These tests could be fiddled with if someone sends ether to our address // We should set up a contract on each network like: