Merge pull request #182 from MetaMask/EasilyConfigurableProviders

Easily configurable providers
feature/default_network_editable
Dan Finlay 9 years ago
commit 30831be137
  1. 3
      CHANGELOG.md
  2. 7
      app/scripts/background.js
  3. 34
      app/scripts/lib/config-manager.js
  4. 3
      test/unit/actions/config_test.js
  5. 10
      ui/app/actions.js
  6. 29
      ui/app/config.js
  7. 12
      ui/app/reducers/metamask.js

@ -2,6 +2,9 @@
## Current Master
- Initial usage of scalable blockchain backend.
- Made official providers more easily configurable for us internally.
## 1.8.0 2016-05-10
- Add support for calls to `eth.sign`.

@ -168,6 +168,7 @@ function setupControllerConnection(stream){
var dnode = Dnode({
getState: function(cb){ cb(null, getState()) },
setRpcTarget: setRpcTarget,
setProviderType: setProviderType,
useEtherscanProvider: useEtherscanProvider,
// forward directly to idStore
createNewVault: idStore.createNewVault.bind(idStore),
@ -255,6 +256,12 @@ function setRpcTarget(rpcTarget){
idStore.getNetwork(3) // 3 retry attempts
}
function setProviderType(type) {
configManager.setProviderType(type)
chrome.runtime.reload()
idStore.getNetwork(3)
}
function useEtherscanProvider() {
configManager.useEtherscanProvider()
chrome.runtime.reload()

@ -2,7 +2,8 @@ const Migrator = require('pojo-migrator')
const extend = require('xtend')
const STORAGE_KEY = 'metamask-config'
const DEFAULT_RPC = 'https://testrpc.metamask.io/'
const TESTNET_RPC = 'http://morden.infura.io'
const MAINNET_RPC = 'http://mainnet.infura.io/'
const migrations = require('./migrations')
@ -59,8 +60,7 @@ ConfigManager.prototype.getConfig = function() {
} else {
return {
provider: {
type: 'rpc',
rpcTarget: DEFAULT_RPC,
type: 'testnet',
}
}
}
@ -75,6 +75,14 @@ ConfigManager.prototype.setRpcTarget = function(rpcUrl) {
this.setConfig(config)
}
ConfigManager.prototype.setProviderType = function(type) {
var config = this.getConfig()
config.provider = {
type: type,
}
this.setConfig(config)
}
ConfigManager.prototype.useEtherscanProvider = function() {
var config = this.getConfig()
config.provider = {
@ -130,9 +138,19 @@ ConfigManager.prototype.getShouldShowSeedWords = function() {
}
ConfigManager.prototype.getCurrentRpcAddress = function() {
var config = this.getConfig()
if (!config) return null
return config.provider && config.provider.rpcTarget ? config.provider.rpcTarget : DEFAULT_RPC
var provider = this.getProvider()
if (!provider) return null
switch (provider.type) {
case 'mainnet':
return MAINNET_RPC
case 'testnet':
return TESTNET_RPC
default:
return provider && provider.rpcTarget ? provider.rpcTarget : TESTNET_RPC
}
}
ConfigManager.prototype.clearWallet = function() {
@ -246,7 +264,9 @@ function loadData() {
},
data: {
config: {
rpcTarget: DEFAULT_RPC,
provider: {
type: 'testnet',
}
}
}
}, oldData ? oldData : null, newData ? newData : null)

@ -36,7 +36,8 @@ describe ('config view actions', function() {
}
var result = reducers(initialState, action)
assert.equal(result.metamask.rpcTarget, action.value)
assert.equal(result.metamask.provider.type, 'rpc')
assert.equal(result.metamask.provider.rpcTarget, action.value)
})
})
})

@ -77,10 +77,12 @@ var actions = {
// config screen
SHOW_CONFIG_PAGE: 'SHOW_CONFIG_PAGE',
SET_RPC_TARGET: 'SET_RPC_TARGET',
SET_PROVIDER_TYPE: 'SET_PROVIDER_TYPE',
USE_ETHERSCAN_PROVIDER: 'USE_ETHERSCAN_PROVIDER',
useEtherscanProvider: useEtherscanProvider,
showConfigPage: showConfigPage,
setRpcTarget: setRpcTarget,
setProviderType: setProviderType,
// hacky - need a way to get a reference to account manager
_setAccountManager: _setAccountManager,
// loading overlay
@ -369,6 +371,14 @@ function setRpcTarget(newRpc) {
}
}
function setProviderType(type) {
_accountManager.setProviderType(type)
return {
type: this.SET_PROVIDER_TYPE,
value: type,
}
}
function useEtherscanProvider() {
_accountManager.useEtherscanProvider()
return {

@ -84,7 +84,7 @@ ConfigScreen.prototype.render = function() {
},
onClick(event) {
event.preventDefault()
state.dispatch(actions.setRpcTarget('https://rpc.metamask.io/'))
state.dispatch(actions.setProviderType('mainnet'))
}
}, 'Use Main Network')
]),
@ -96,7 +96,7 @@ ConfigScreen.prototype.render = function() {
},
onClick(event) {
event.preventDefault()
state.dispatch(actions.setRpcTarget('https://testrpc.metamask.io/'))
state.dispatch(actions.setProviderType('testnet'))
}
}, 'Use Morden Test Network')
]),
@ -120,9 +120,28 @@ ConfigScreen.prototype.render = function() {
}
function currentProviderDisplay(metamaskState) {
var rpc = metamaskState.provider.rpcTarget
var provider = metamaskState.provider
var title, value
switch (provider.type) {
case 'mainnet':
title = 'Current Network'
value = 'Main Ethereum Network'
break
case 'testnet':
title = 'Current Network'
value = 'Morden Test Network'
break
default:
title = 'Current RPC'
value = metamaskState.provider.rpcTarget
}
return h('div', [
h('span', {style: { fontWeight: 'bold', paddingRight: '10px'}}, 'Current RPC'),
h('span', rpc)
h('span', {style: { fontWeight: 'bold', paddingRight: '10px'}}, title),
h('span', value)
])
}

@ -38,7 +38,17 @@ function reduceMetamask(state, action) {
case actions.SET_RPC_TARGET:
return extend(metamaskState, {
rpcTarget: action.value,
provider: {
type: 'rpc',
rpcTarget: action.value,
},
})
case actions.SET_PROVIDER_TYPE:
return extend(metamaskState, {
provider: {
type: action.value,
},
})
case actions.COMPLETED_TX:

Loading…
Cancel
Save