aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/network/createInfuraClient.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2018-05-17 11:46:34 +0800
committerkumavis <aaron@kumavis.me>2018-05-17 11:46:34 +0800
commit088d7930e0895ef1802823c5fc843dd1c19b9661 (patch)
treea2aed8b980fa44254121021d0529169369d77992 /app/scripts/controllers/network/createInfuraClient.js
parent708422432c634ffbd4c73388f980c43f766b3355 (diff)
downloadtangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar
tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.gz
tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.bz2
tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.lz
tangerine-wallet-browser-088d7930e0895ef1802823c5fc843dd1c19b9661.tar.xz
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.js34
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()
+ })
+}