aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <somniac@me.com>2016-04-01 07:32:02 +0800
committerDan Finlay <somniac@me.com>2016-04-01 07:32:02 +0800
commit01016eb3e75cab701f153b94e131bc3ae9408be7 (patch)
tree99d9a7549ec9a0f9967aa688d6a9c88791ed9990
parentf451da67a725636c5b504737a8bc45774a6fc5c3 (diff)
parent8384b035e81d47573f6f3a67045bcd6b3e32287c (diff)
downloadtangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar.gz
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar.bz2
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar.lz
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar.xz
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.tar.zst
tangerine-wallet-browser-01016eb3e75cab701f153b94e131bc3ae9408be7.zip
Merge pull request #82 from MetaMask/EtherscanProvider
Etherscan provider
-rw-r--r--app/manifest.json3
-rw-r--r--app/scripts/background.js21
-rw-r--r--app/scripts/lib/config-manager.js31
-rw-r--r--app/scripts/lib/zero.js65
-rw-r--r--package.json2
5 files changed, 105 insertions, 17 deletions
diff --git a/app/manifest.json b/app/manifest.json
index 915295914..f37d4663d 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -1,6 +1,7 @@
{
"name": "__MSG_appName__",
- "version": "1.2.1",
+ "short_name": "Metamask",
+ "version": "1.3.0",
"manifest_version": 2,
"description": "__MSG_appDescription__",
"icons": {
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 772c1de89..14293ab05 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -6,7 +6,7 @@ const combineStreams = require('pumpify')
const extend = require('xtend')
const EthStore = require('eth-store')
const PortStream = require('./lib/port-stream.js')
-const MetaMaskProvider = require('web3-provider-engine/zero.js')
+const MetaMaskProvider = require('./lib/zero.js')
const IdentityStore = require('./lib/idStore')
const createTxNotification = require('./lib/tx-notification.js')
const configManager = require('./lib/config-manager-singleton')
@@ -36,8 +36,9 @@ function handleEthRpcRequestStream(stream){
// state and network
//
+var providerConfig = configManager.getProvider()
var idStore = new IdentityStore()
-var zeroClient = MetaMaskProvider({
+var providerOpts = {
rpcUrl: configManager.getCurrentRpcAddress(),
getAccounts: function(cb){
var selectedAddress = idStore.getSelectedAddress()
@@ -46,14 +47,16 @@ var zeroClient = MetaMaskProvider({
},
approveTransaction: addUnconfirmedTx,
signTransaction: idStore.signTransaction.bind(idStore),
-})
+ etherscan: providerConfig.type === 'etherscan',
+}
+var provider = MetaMaskProvider(providerOpts)
// log new blocks
-zeroClient.on('block', function(block){
+provider.on('block', function(block){
console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex'))
})
-var ethStore = new EthStore(zeroClient)
+var ethStore = new EthStore(provider)
idStore.setStore(ethStore)
function getState(){
@@ -68,7 +71,7 @@ function getState(){
// handle rpc requests
function onRpcRequest(remoteStream, payload){
// console.log('MetaMaskPlugin - incoming payload:', payload)
- zeroClient.sendAsync(payload, function onPayloadHandled(err, response){
+ provider.sendAsync(payload, function onPayloadHandled(err, response){
// provider engine errors are included in response objects
if (!payload.isMetamaskInternal) console.log('MetaMaskPlugin - RPC complete:', payload, '->', response)
try {
@@ -111,6 +114,7 @@ function linkDnode(stream){
var connection = Dnode({
getState: function(cb){ cb(null, getState()) },
setRpcTarget: setRpcTarget,
+ useEtherscanProvider: useEtherscanProvider,
// forward directly to idStore
createNewVault: idStore.createNewVault.bind(idStore),
recoverFromSeed: idStore.recoverFromSeed.bind(idStore),
@@ -179,6 +183,11 @@ function setRpcTarget(rpcTarget){
chrome.runtime.reload()
}
+function useEtherscanProvider() {
+ configManager.useEtherscanProvider()
+ chrome.runtime.reload()
+}
+
// util
function jsonParseStream(){
diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js
index 682b34637..121ede838 100644
--- a/app/scripts/lib/config-manager.js
+++ b/app/scripts/lib/config-manager.js
@@ -47,15 +47,6 @@ ConfigManager.prototype.setConfig = function(config) {
this.setData(data)
}
-ConfigManager.prototype.setRpcTarget = function(rpcUrl) {
- var config = this.getConfig()
- config.provider = {
- type: 'rpc',
- rpcTarget: rpcUrl,
- }
- this.setConfig(config)
-}
-
ConfigManager.prototype.getConfig = function() {
var data = this.migrator.getData()
if ('config' in data) {
@@ -70,6 +61,28 @@ ConfigManager.prototype.getConfig = function() {
}
}
+ConfigManager.prototype.setRpcTarget = function(rpcUrl) {
+ var config = this.getConfig()
+ config.provider = {
+ type: 'rpc',
+ rpcTarget: rpcUrl,
+ }
+ this.setConfig(config)
+}
+
+ConfigManager.prototype.useEtherscanProvider = function() {
+ var config = this.getConfig()
+ config.provider = {
+ type: 'etherscan',
+ }
+ this.setConfig(config)
+}
+
+ConfigManager.prototype.getProvider = function() {
+ var config = this.getConfig()
+ return config.provider
+}
+
ConfigManager.prototype.setData = function(data) {
this.migrator.saveData(data)
}
diff --git a/app/scripts/lib/zero.js b/app/scripts/lib/zero.js
new file mode 100644
index 000000000..d33f099d3
--- /dev/null
+++ b/app/scripts/lib/zero.js
@@ -0,0 +1,65 @@
+const ProviderEngine = require('web3-provider-engine/index.js')
+const DefaultFixture = require('web3-provider-engine/subproviders/default-fixture.js')
+const NonceTrackerSubprovider = require('web3-provider-engine/subproviders/nonce-tracker.js')
+const CacheSubprovider = require('web3-provider-engine/subproviders/cache.js')
+const FilterSubprovider = require('web3-provider-engine/subproviders/filters.js')
+const HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet.js')
+const RpcSubprovider = require('web3-provider-engine/subproviders/rpc.js')
+const EtherscanSubprovider = require('web3-provider-engine/subproviders/etherscan.js')
+
+
+module.exports = ZeroClientProvider
+
+
+function ZeroClientProvider(opts){
+ opts = opts || {}
+
+ var engine = new ProviderEngine()
+
+ // static
+ var staticSubprovider = new DefaultFixture()
+ engine.addProvider(staticSubprovider)
+
+ // nonce tracker
+ engine.addProvider(new NonceTrackerSubprovider())
+
+ // cache layer
+ var cacheSubprovider = new CacheSubprovider()
+ engine.addProvider(cacheSubprovider)
+
+ // filters
+ var filterSubprovider = new FilterSubprovider()
+ engine.addProvider(filterSubprovider)
+
+ // id mgmt
+ var idmgmtSubprovider = new HookedWalletSubprovider({
+ getAccounts: opts.getAccounts,
+ approveTransaction: opts.approveTransaction,
+ signTransaction: opts.signTransaction,
+ })
+ engine.addProvider(idmgmtSubprovider)
+
+ // data source
+ var dataProvider
+ if (!opts.etherscan) {
+ dataProvider = new RpcSubprovider({
+ rpcUrl: opts.rpcUrl || 'https://testrpc.metamask.io/',
+ })
+ } else {
+ dataProvider = new EtherscanSubprovider()
+ }
+ engine.addProvider(dataProvider)
+
+ // // log new blocks
+ // engine.on('block', function(block){
+ // console.log('================================')
+ // console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex'))
+ // console.log('================================')
+ // })
+
+ // start polling
+ engine.start()
+
+ return engine
+
+}
diff --git a/package.json b/package.json
index be61f1d14..83d563633 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,7 @@
"readable-stream": "^2.0.5",
"through2": "^2.0.1",
"web3": "^0.15.1",
- "web3-provider-engine": "^7.0.0",
+ "web3-provider-engine": "^7.2.1",
"xtend": "^4.0.1"
},
"devDependencies": {