diff options
author | kumavis <aaron@kumavis.me> | 2018-05-17 11:46:34 +0800 |
---|---|---|
committer | kumavis <aaron@kumavis.me> | 2018-05-17 11:46:34 +0800 |
commit | 088d7930e0895ef1802823c5fc843dd1c19b9661 (patch) | |
tree | a2aed8b980fa44254121021d0529169369d77992 /app/scripts/controllers/network/createInfuraClient.js | |
parent | 708422432c634ffbd4c73388f980c43f766b3355 (diff) | |
download | tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.gz tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.zst tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.zip |
network - create provider and block-tracker via json-rpc-engine
Diffstat (limited to 'app/scripts/controllers/network/createInfuraClient.js')
-rw-r--r-- | app/scripts/controllers/network/createInfuraClient.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/app/scripts/controllers/network/createInfuraClient.js b/app/scripts/controllers/network/createInfuraClient.js new file mode 100644 index 000000000..e346f4bcb --- /dev/null +++ b/app/scripts/controllers/network/createInfuraClient.js @@ -0,0 +1,34 @@ +const mergeMiddleware = require('json-rpc-engine/src/mergeMiddleware') +const createAsyncMiddleware = require('json-rpc-engine/src/createAsyncMiddleware') +const createBlockRefMiddleware = require('eth-json-rpc-middleware/block-ref') +const createBlockRefMiddleware = require('eth-json-rpc-middleware/block-cache') +const BlockTracker = require('eth-block-tracker') + +module.exports = createInfuraClient + +function createInfuraClient({ network }) { + const infuraMiddleware = createInfuraMiddleware({ network }) + const blockProvider = providerFromMiddleware(infuraMiddleware) + const blockTracker = new BlockTracker({ provider: blockProvider }) + + const networkMiddleware = mergeMiddleware([ + createBlockRefMiddleware({ blockTracker }), + createBlockCacheMiddleware({ blockTracker }), + createInflightMiddleware(), + createBlockTrackerInspectorMiddleware({ blockTracker }), + infuraMiddleware, + ]) + 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() + }) +} |