diff options
author | Fabio Berger <me@fabioberger.com> | 2018-09-24 22:53:34 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-09-24 22:53:34 +0800 |
commit | 5e1a2bd972cab09d7e487cf80fa9c913e5c0696d (patch) | |
tree | ccb43389b3551e410bec00e77acf40e9a1f6575c /packages/web3-wrapper/src | |
parent | 45dc2be0832eefbf6f009b07abb7b7a435b19279 (diff) | |
parent | fc33eacd2cbcc088d238f5e1f34b50b06ea8d58f (diff) | |
download | dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar.gz dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar.bz2 dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar.lz dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar.xz dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.tar.zst dexon-0x-contracts-5e1a2bd972cab09d7e487cf80fa9c913e5c0696d.zip |
Merge development
Diffstat (limited to 'packages/web3-wrapper/src')
-rw-r--r-- | packages/web3-wrapper/src/web3_wrapper.ts | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts index 3764b4593..2f574b76a 100644 --- a/packages/web3-wrapper/src/web3_wrapper.ts +++ b/packages/web3-wrapper/src/web3_wrapper.ts @@ -329,23 +329,29 @@ export class Web3Wrapper { /** * Fetch a specific Ethereum block without transaction data * @param blockParam The block you wish to fetch (blockHash, blockNumber or blockLiteral) - * @returns The requested block without transaction data + * @returns The requested block without transaction data, or undefined if block was not found + * (e.g the node isn't fully synced, there was a block re-org and the requested block was uncles, etc...) */ - public async getBlockAsync(blockParam: string | BlockParam): Promise<BlockWithoutTransactionData> { + public async getBlockIfExistsAsync( + blockParam: string | BlockParam, + ): Promise<BlockWithoutTransactionData | undefined> { Web3Wrapper._assertBlockParamOrString(blockParam); const encodedBlockParam = marshaller.marshalBlockParam(blockParam); const method = utils.isHexStrict(blockParam) ? 'eth_getBlockByHash' : 'eth_getBlockByNumber'; const shouldIncludeTransactionData = false; - const blockWithoutTransactionDataWithHexValues = await this._sendRawPayloadAsync< + const blockWithoutTransactionDataWithHexValuesOrNull = await this._sendRawPayloadAsync< BlockWithoutTransactionDataRPC >({ method, params: [encodedBlockParam, shouldIncludeTransactionData], }); - const blockWithoutTransactionData = marshaller.unmarshalIntoBlockWithoutTransactionData( - blockWithoutTransactionDataWithHexValues, - ); - return blockWithoutTransactionData; + let blockWithoutTransactionDataIfExists; + if (!_.isNull(blockWithoutTransactionDataWithHexValuesOrNull)) { + blockWithoutTransactionDataIfExists = marshaller.unmarshalIntoBlockWithoutTransactionData( + blockWithoutTransactionDataWithHexValuesOrNull, + ); + } + return blockWithoutTransactionDataIfExists; } /** * Fetch a specific Ethereum block with transaction data @@ -376,8 +382,11 @@ export class Web3Wrapper { */ public async getBlockTimestampAsync(blockParam: string | BlockParam): Promise<number> { Web3Wrapper._assertBlockParamOrString(blockParam); - const { timestamp } = await this.getBlockAsync(blockParam); - return timestamp; + const blockIfExists = await this.getBlockIfExistsAsync(blockParam); + if (_.isUndefined(blockIfExists)) { + throw new Error(`Failed to fetch block with blockParam: ${JSON.stringify(blockParam)}`); + } + return blockIfExists.timestamp; } /** * Retrieve the user addresses available through the backing provider |