|
|
@ -3,6 +3,7 @@ const createAsyncMiddleware = require('json-rpc-engine/src/createAsyncMiddleware |
|
|
|
const createBlockReEmitMiddleware = require('eth-json-rpc-middleware/block-reemit') |
|
|
|
const createBlockReEmitMiddleware = require('eth-json-rpc-middleware/block-reemit') |
|
|
|
const createBlockCacheMiddleware = require('eth-json-rpc-middleware/block-cache') |
|
|
|
const createBlockCacheMiddleware = require('eth-json-rpc-middleware/block-cache') |
|
|
|
const createInflightMiddleware = require('eth-json-rpc-middleware/inflight-cache') |
|
|
|
const createInflightMiddleware = require('eth-json-rpc-middleware/inflight-cache') |
|
|
|
|
|
|
|
const createBlockTrackerInspectorMiddleware = require('eth-json-rpc-middleware/block-tracker-inspector') |
|
|
|
const providerFromMiddleware = require('eth-json-rpc-middleware/providerFromMiddleware') |
|
|
|
const providerFromMiddleware = require('eth-json-rpc-middleware/providerFromMiddleware') |
|
|
|
const createInfuraMiddleware = require('eth-json-rpc-infura') |
|
|
|
const createInfuraMiddleware = require('eth-json-rpc-infura') |
|
|
|
const BlockTracker = require('eth-block-tracker') |
|
|
|
const BlockTracker = require('eth-block-tracker') |
|
|
@ -15,23 +16,11 @@ function createInfuraClient ({ network }) { |
|
|
|
const blockTracker = new BlockTracker({ provider: blockProvider }) |
|
|
|
const blockTracker = new BlockTracker({ provider: blockProvider }) |
|
|
|
|
|
|
|
|
|
|
|
const networkMiddleware = mergeMiddleware([ |
|
|
|
const networkMiddleware = mergeMiddleware([ |
|
|
|
createBlockReEmitMiddleware({ blockTracker, provider: blockProvider }), |
|
|
|
|
|
|
|
createBlockCacheMiddleware({ blockTracker }), |
|
|
|
createBlockCacheMiddleware({ blockTracker }), |
|
|
|
createInflightMiddleware(), |
|
|
|
createInflightMiddleware(), |
|
|
|
|
|
|
|
createBlockReEmitMiddleware({ blockTracker, provider: blockProvider }), |
|
|
|
createBlockTrackerInspectorMiddleware({ blockTracker }), |
|
|
|
createBlockTrackerInspectorMiddleware({ blockTracker }), |
|
|
|
infuraMiddleware, |
|
|
|
infuraMiddleware, |
|
|
|
]) |
|
|
|
]) |
|
|
|
return { networkMiddleware, blockTracker } |
|
|
|
return { networkMiddleware, blockTracker } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// inspect if response contains a block ref higher than our latest block
|
|
|
|
|
|
|
|
const futureBlockRefRequests = ['eth_getTransactionByHash', 'eth_getTransactionReceipt'] |
|
|
|
|
|
|
|
function createBlockTrackerInspectorMiddleware ({ blockTracker }) { |
|
|
|
|
|
|
|
return createAsyncMiddleware(async (req, res, next) => { |
|
|
|
|
|
|
|
if (!futureBlockRefRequests.includes(req.method)) return next() |
|
|
|
|
|
|
|
await next() |
|
|
|
|
|
|
|
const blockNumber = Number.parseInt(res.result.blockNumber, 16) |
|
|
|
|
|
|
|
const currentBlockNumber = Number.parseInt(blockTracker.getCurrentBlock(), 16) |
|
|
|
|
|
|
|
if (blockNumber > currentBlockNumber) await blockTracker.checkForLatestBlock() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|