diff options
author | Dan Finlay <542863+danfinlay@users.noreply.github.com> | 2018-08-16 06:41:05 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-16 06:41:05 +0800 |
commit | 955ec2dca620f25beb2c7cd24c059f6ac22fdebe (patch) | |
tree | afa2b160c8d0a49b2eeb548a62ca3dde8f88d57a /docs/porting_to_new_environment.md | |
parent | 8b73a69cd838d99710c35d69b694ae5f9f27b997 (diff) | |
parent | ce645561fb77a299ba6f38999af111def00bc17c (diff) | |
download | tangerine-wallet-browser-955ec2dca620f25beb2c7cd24c059f6ac22fdebe.tar.gz tangerine-wallet-browser-955ec2dca620f25beb2c7cd24c059f6ac22fdebe.tar.zst tangerine-wallet-browser-955ec2dca620f25beb2c7cd24c059f6ac22fdebe.zip |
Merge pull request #4279 from MetaMask/network-remove-provider-engine
Enhancement: New BlockTracker and Json-Rpc-Engine based Provider
Diffstat (limited to 'docs/porting_to_new_environment.md')
-rw-r--r-- | docs/porting_to_new_environment.md | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/docs/porting_to_new_environment.md b/docs/porting_to_new_environment.md index 3b1e46052..983c81f3e 100644 --- a/docs/porting_to_new_environment.md +++ b/docs/porting_to_new_environment.md @@ -89,8 +89,6 @@ MetaMask has two kinds of [duplex stream APIs](https://github.com/substack/strea If you are making a MetaMask-powered browser for a new platform, one of the trickiest tasks will be injecting the Web3 API into websites that are visited. On WebExtensions, we actually have to pipe data through a total of three JS contexts just to let sites talk to our background process (site -> contentscript -> background). -To make this as easy as possible, we use one of our favorite internal tools, [web3-provider-engine](https://www.npmjs.com/package/web3-provider-engine) to construct a custom web3 provider object whose source of truth is a stream that we connect to remotely. - To see how we do that, you can refer to the [inpage script](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/inpage.js) that we inject into every website. There you can see it creates a multiplex stream to the background, and uses it to initialize what we call the [inpage-provider](https://github.com/MetaMask/metamask-extension/blob/master/app/scripts/lib/inpage-provider.js), which you can see stubs a few methods out, but mostly just passes calls to `sendAsync` through the stream it's passed! That's really all the magic that's needed to create a web3-like API in a remote context, once you have a stream to MetaMask available. In `inpage.js` you can see we create a `PortStream`, that's just a class we use to wrap WebExtension ports as streams, so we can reuse our favorite stream abstraction over the more irregular API surface of the WebExtension. In a new platform, you will probably need to construct this stream differently. The key is that you need to construct a stream that talks from the site context to the background. Once you have that set up, it works like magic! |