Make default providers more easiliy configurable for metamask devs

No longer do our `mainnet` and `testnet` buttons set specific RPC urls. Now they set `provider.type`, which gets interpreted with code.

Currently the provider types of `mainnet` and `testnet` point to our new scalable backends, but these could be re-interpreted to use any other provider, be it etherscan, peer to peer, or otherwise.

Makes it easier for us to upgrade our infrastructure without incorporating migration logic into the program.
feature/default_network_editable
Dan Finlay 9 years ago
parent ab273ba444
commit d8bee4f599
  1. 3
      CHANGELOG.md
  2. 7
      app/scripts/background.js
  3. 34
      app/scripts/lib/config-manager.js
  4. 10
      ui/app/actions.js
  5. 29
      ui/app/config.js
  6. 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)

@ -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