diff --git a/packages/api-jsonrpc/src/extra/getBlockNumber.js b/packages/api-jsonrpc/src/extra/getBlockNumber.js index 43fb26bb940a..c941ef0d827c 100644 --- a/packages/api-jsonrpc/src/extra/getBlockNumber.js +++ b/packages/api-jsonrpc/src/extra/getBlockNumber.js @@ -13,6 +13,7 @@ import type { InterfaceMethodDefinition } from '../types'; Returns the best blockNumber available on the client */ module.exports = ({ + isSubscription: true, inputs: [], output: { type: 'BlockNumber' } }: InterfaceMethodDefinition); diff --git a/packages/api-jsonrpc/src/extra/getClientTime.js b/packages/api-jsonrpc/src/extra/getClientTime.js index c7877d7e8716..0bef7ad2f437 100644 --- a/packages/api-jsonrpc/src/extra/getClientTime.js +++ b/packages/api-jsonrpc/src/extra/getClientTime.js @@ -13,6 +13,7 @@ import type { InterfaceMethodDefinition } from '../types'; Returns the current time on the running node */ module.exports = ({ + isSubscription: true, inputs: [], output: { type: 'U64' } }: InterfaceMethodDefinition); diff --git a/packages/api-provider/src/mock/mocks.js b/packages/api-provider/src/mock/mocks.js index 81b0295bd0ba..0ae3102bfda3 100644 --- a/packages/api-provider/src/mock/mocks.js +++ b/packages/api-provider/src/mock/mocks.js @@ -5,8 +5,27 @@ import type { MockState, MockState$Subscription$Callback } from './types'; +const bnToU8a = require('@polkadot/util/bn/toU8a'); +const randomAsHex = require('@polkadot/util-crypto/random/asHex'); + +function makeBlockHeader (prevNumber: number) { + const blockNumber = prevNumber++; + + return { + digest: { + logs: [] + }, + extrinsicsRoot: randomAsHex(), + number: blockNumber, + parentHash: prevNumber === -1 + ? '0x0000000000000000000000000000000000000000000000000000000000000000' + : bnToU8a(prevNumber, 256), + stateRoot: bnToU8a(blockNumber, 256) + }; +} + module.exports = function mocks ({ subscriptions }: MockState): void { - let blockNumber = 0; + let newHead = makeBlockHeader(-1); const updateSubs = (method, value) => { subscriptions[method].lastValue = value; @@ -24,7 +43,10 @@ module.exports = function mocks ({ subscriptions }: MockState): void { }; setInterval(() => { - updateSubs('extra_getBlockNumber', `0x${(++blockNumber).toString(16)}`); + newHead = makeBlockHeader(newHead.number); + + updateSubs('extra_getBlockNumber', `0x${(newHead.number).toString(16)}`); + updateSubs('chain_newHead', newHead); }, 5000); setInterval(() => { diff --git a/packages/api-provider/src/mock/state.js b/packages/api-provider/src/mock/state.js index aebd9525f94b..3110ff2ecb6c 100644 --- a/packages/api-provider/src/mock/state.js +++ b/packages/api-provider/src/mock/state.js @@ -12,6 +12,7 @@ const METHODS = Array.prototype.concat.apply( [], Object.keys(interfaces).map((section) => { return Object .keys(interfaces[section].methods) + .filter((method) => interfaces[section].methods[method].isSubscription) .map((method) => `${section}_${method}`); }) );