Merge development
This commit is contained in:
@@ -1,12 +1,24 @@
|
||||
[
|
||||
{
|
||||
"version": "3.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note":
|
||||
"Rename `getBlockAsync` to `getBlockIfExistsAsync` and rather then throw if the requested block wasn't found, return undefined.",
|
||||
"pr": 1082
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.3",
|
||||
"changes": [
|
||||
{
|
||||
"note":
|
||||
"Fixes issue #1076 where Parity now returns a placeholder transactionReceipt before the transaction is mined."
|
||||
"Fixes issue #1076 where Parity now returns a placeholder transactionReceipt before the transaction is mined.",
|
||||
"pr": 1079
|
||||
}
|
||||
]
|
||||
],
|
||||
"timestamp": 1537541580
|
||||
},
|
||||
{
|
||||
"timestamp": 1536142250,
|
||||
|
||||
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v2.0.3 - _September 21, 2018_
|
||||
|
||||
* Fixes issue #1076 where Parity now returns a placeholder transactionReceipt before the transaction is mined. (#1079)
|
||||
|
||||
## v2.0.2 - _September 5, 2018_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0xproject/web3-wrapper",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.3",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,11 +53,11 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0xproject/assert": "^1.0.8",
|
||||
"@0xproject/json-schemas": "^1.0.1",
|
||||
"@0xproject/typescript-typings": "^2.0.0",
|
||||
"@0xproject/utils": "^1.0.8",
|
||||
"ethereum-types": "^1.0.6",
|
||||
"@0xproject/assert": "^1.0.9",
|
||||
"@0xproject/json-schemas": "^1.0.2",
|
||||
"@0xproject/typescript-typings": "^2.0.1",
|
||||
"@0xproject/utils": "^1.0.9",
|
||||
"ethereum-types": "^1.0.7",
|
||||
"ethereumjs-util": "^5.1.1",
|
||||
"ethers": "3.0.22",
|
||||
"lodash": "^4.17.5"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -85,28 +85,40 @@ describe('Web3Wrapper tests', () => {
|
||||
expect(typeof blockNumber).to.be.equal('number');
|
||||
});
|
||||
});
|
||||
describe('#getBlockAsync', () => {
|
||||
describe('#getBlockIfExistsAsync', () => {
|
||||
it('gets block when supplied a valid BlockParamLiteral value', async () => {
|
||||
const blockParamLiteral = BlockParamLiteral.Earliest;
|
||||
const block = await web3Wrapper.getBlockAsync(blockParamLiteral);
|
||||
expect(block.number).to.be.equal(0);
|
||||
expect(utils.isBigNumber(block.difficulty)).to.equal(true);
|
||||
expect(_.isNumber(block.gasLimit)).to.equal(true);
|
||||
const blockIfExists = await web3Wrapper.getBlockIfExistsAsync(blockParamLiteral);
|
||||
if (_.isUndefined(blockIfExists)) {
|
||||
throw new Error('Expected block to exist');
|
||||
}
|
||||
expect(blockIfExists.number).to.be.equal(0);
|
||||
expect(utils.isBigNumber(blockIfExists.difficulty)).to.equal(true);
|
||||
expect(_.isNumber(blockIfExists.gasLimit)).to.equal(true);
|
||||
});
|
||||
it('gets block when supplied a block number', async () => {
|
||||
const blockParamLiteral = 0;
|
||||
const block = await web3Wrapper.getBlockAsync(blockParamLiteral);
|
||||
expect(block.number).to.be.equal(0);
|
||||
const blockIfExists = await web3Wrapper.getBlockIfExistsAsync(blockParamLiteral);
|
||||
if (_.isUndefined(blockIfExists)) {
|
||||
throw new Error('Expected block to exist');
|
||||
}
|
||||
expect(blockIfExists.number).to.be.equal(0);
|
||||
});
|
||||
it('gets block when supplied a block hash', async () => {
|
||||
const blockParamLiteral = 0;
|
||||
const block = await web3Wrapper.getBlockAsync(blockParamLiteral);
|
||||
const sameBlock = await web3Wrapper.getBlockAsync(block.hash as string);
|
||||
expect(sameBlock.number).to.be.equal(0);
|
||||
const blockIfExists = await web3Wrapper.getBlockIfExistsAsync(blockParamLiteral);
|
||||
if (_.isUndefined(blockIfExists)) {
|
||||
throw new Error('Expected block to exist');
|
||||
}
|
||||
const sameBlockIfExists = await web3Wrapper.getBlockIfExistsAsync(blockIfExists.hash as string);
|
||||
if (_.isUndefined(sameBlockIfExists)) {
|
||||
throw new Error('Expected block to exist');
|
||||
}
|
||||
expect(sameBlockIfExists.number).to.be.equal(0);
|
||||
});
|
||||
it('should throw if supplied invalid blockParam value', async () => {
|
||||
const invalidBlockParam = 'deadbeef';
|
||||
expect(web3Wrapper.getBlockAsync(invalidBlockParam)).to.eventually.to.be.rejected();
|
||||
expect(web3Wrapper.getBlockIfExistsAsync(invalidBlockParam)).to.eventually.to.be.rejected();
|
||||
});
|
||||
});
|
||||
describe('#getBlockWithTransactionDataAsync', () => {
|
||||
|
||||
Reference in New Issue
Block a user