Merge pull request #303 from andrewnguyen22/pocket-nifty
Pocket-Nifty PR: Closes Issue #288
This commit is contained in:
commit
5279197871
|
@ -0,0 +1,124 @@
|
||||||
|
const mergeMiddleware = require('json-rpc-engine/src/mergeMiddleware')
|
||||||
|
const createScaffoldMiddleware = require('json-rpc-engine/src/createScaffoldMiddleware')
|
||||||
|
const createBlockReRefMiddleware = require('eth-json-rpc-middleware/block-ref')
|
||||||
|
const createRetryOnEmptyMiddleware = require('eth-json-rpc-middleware/retryOnEmpty')
|
||||||
|
const createBlockCacheMiddleware = require('eth-json-rpc-middleware/block-cache')
|
||||||
|
const createInflightMiddleware = require('eth-json-rpc-middleware/inflight-cache')
|
||||||
|
const createBlockTrackerInspectorMiddleware = require('eth-json-rpc-middleware/block-tracker-inspector')
|
||||||
|
const providerFromMiddleware = require('eth-json-rpc-middleware/providerFromMiddleware')
|
||||||
|
const createPocketMiddleware = require('json-rpc-pocket')
|
||||||
|
const BlockTracker = require('eth-block-tracker')
|
||||||
|
const devid = 'DEVVGQ8VfHgBBet8CyowHcN'
|
||||||
|
const {
|
||||||
|
ROPSTEN,
|
||||||
|
ROPSTEN_CODE,
|
||||||
|
ROPSTEN_CHAINID,
|
||||||
|
RINKEBY_CODE,
|
||||||
|
RINKEBY_CHAINID,
|
||||||
|
RINKEBY,
|
||||||
|
KOVAN,
|
||||||
|
KOVAN_CODE,
|
||||||
|
KOVAN_CHAINID,
|
||||||
|
MAINNET,
|
||||||
|
MAINNET_CODE,
|
||||||
|
MAINNET_CHAINID,
|
||||||
|
ETH_TICK,
|
||||||
|
POA_SOKOL,
|
||||||
|
POA_CODE,
|
||||||
|
POA_CHAINID,
|
||||||
|
POA_TICK,
|
||||||
|
POA,
|
||||||
|
DAI,
|
||||||
|
DAI_CODE,
|
||||||
|
DAI_CHAINID,
|
||||||
|
GOERLI_TESTNET,
|
||||||
|
GOERLI_TESTNET_CODE,
|
||||||
|
GOERLI_TESTNET_CHAINID,
|
||||||
|
POA_SOKOL_CODE,
|
||||||
|
POA_SOKOL_CHAINID,
|
||||||
|
} = require('./enums')
|
||||||
|
|
||||||
|
module.exports = createPocketClient
|
||||||
|
|
||||||
|
function createPocketClient ({ network }) {
|
||||||
|
const networkIDs = getNetworkIds({ network })
|
||||||
|
const pocketMiddleware = createPocketMiddleware(devid, {
|
||||||
|
netID: networkIDs.netId,
|
||||||
|
network: networkIDs.ticker,
|
||||||
|
})
|
||||||
|
const pocketProvider = providerFromMiddleware(pocketMiddleware)
|
||||||
|
const blockTracker = new BlockTracker({ provider: pocketProvider })
|
||||||
|
|
||||||
|
const networkMiddleware = mergeMiddleware([
|
||||||
|
createNetworkAndChainIdMiddleware({ network }),
|
||||||
|
createBlockCacheMiddleware({ blockTracker }),
|
||||||
|
createInflightMiddleware(),
|
||||||
|
createBlockReRefMiddleware({ blockTracker, provider: pocketProvider }),
|
||||||
|
createRetryOnEmptyMiddleware({ blockTracker, provider: pocketProvider }),
|
||||||
|
createBlockTrackerInspectorMiddleware({ blockTracker }),
|
||||||
|
pocketMiddleware,
|
||||||
|
])
|
||||||
|
return { networkMiddleware, blockTracker }
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNetworkIds ({ network }) {
|
||||||
|
let chainId
|
||||||
|
let netId
|
||||||
|
let ticker
|
||||||
|
switch (network) {
|
||||||
|
case MAINNET:
|
||||||
|
netId = MAINNET_CODE.toString()
|
||||||
|
chainId = MAINNET_CHAINID
|
||||||
|
ticker = ETH_TICK
|
||||||
|
break
|
||||||
|
case ROPSTEN:
|
||||||
|
netId = ROPSTEN_CODE.toString()
|
||||||
|
chainId = ROPSTEN_CHAINID
|
||||||
|
ticker = ETH_TICK
|
||||||
|
break
|
||||||
|
case RINKEBY:
|
||||||
|
netId = RINKEBY_CODE.toString()
|
||||||
|
chainId = RINKEBY_CHAINID
|
||||||
|
ticker = ETH_TICK
|
||||||
|
break
|
||||||
|
case KOVAN:
|
||||||
|
netId = KOVAN_CODE.toString()
|
||||||
|
chainId = KOVAN_CHAINID
|
||||||
|
ticker = ETH_TICK
|
||||||
|
break
|
||||||
|
case GOERLI_TESTNET:
|
||||||
|
netId = GOERLI_TESTNET_CODE.toString()
|
||||||
|
chainId = GOERLI_TESTNET_CHAINID
|
||||||
|
ticker = ETH_TICK
|
||||||
|
break
|
||||||
|
case POA:
|
||||||
|
netId = POA_CODE.toString()
|
||||||
|
chainId = POA_CHAINID
|
||||||
|
ticker = POA_TICK
|
||||||
|
break
|
||||||
|
case DAI:
|
||||||
|
netId = DAI_CODE.toString()
|
||||||
|
chainId = DAI_CHAINID
|
||||||
|
ticker = POA_TICK
|
||||||
|
break
|
||||||
|
case POA_SOKOL:
|
||||||
|
netId= POA_SOKOL_CODE.toString()
|
||||||
|
chainId = POA_SOKOL_CHAINID
|
||||||
|
ticker = POA_TICK
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
throw new Error(`createPocketClient - unknown network "${network}"`)
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
chainId, netId, ticker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createNetworkAndChainIdMiddleware ({ network }) {
|
||||||
|
const networkIds = getNetworkIds({network})
|
||||||
|
|
||||||
|
return createScaffoldMiddleware({
|
||||||
|
eth_chainId: networkIds.chainId,
|
||||||
|
net_version: networkIds.netId,
|
||||||
|
})
|
||||||
|
}
|
|
@ -11,6 +11,18 @@ const RSK = 'rsk'
|
||||||
const RSK_TESTNET = 'rsk_testnet'
|
const RSK_TESTNET = 'rsk_testnet'
|
||||||
const LOCALHOST = 'localhost'
|
const LOCALHOST = 'localhost'
|
||||||
|
|
||||||
|
const ETH_TICK = "ETH"
|
||||||
|
const POA_TICK = "POA"
|
||||||
|
|
||||||
|
const MAINNET_CHAINID = "0X01"
|
||||||
|
const ROPSTEN_CHAINID = "0x03"
|
||||||
|
const RINKEBY_CHAINID = "0x04"
|
||||||
|
const KOVAN_CHAINID = "0x2a"
|
||||||
|
const GOERLI_TESTNET_CHAINID = "0X5"
|
||||||
|
const POA_CHAINID = "0x63"
|
||||||
|
const DAI_CHAINID = "0x64"
|
||||||
|
const POA_SOKOL_CHAINID = "0x4D"
|
||||||
|
|
||||||
const POA_CODE = 99
|
const POA_CODE = 99
|
||||||
const DAI_CODE = 100
|
const DAI_CODE = 100
|
||||||
const POA_SOKOL_CODE = 77
|
const POA_SOKOL_CODE = 77
|
||||||
|
@ -54,6 +66,16 @@ const chainTypes = {
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
POA,
|
POA,
|
||||||
|
POA_TICK,
|
||||||
|
ETH_TICK,
|
||||||
|
MAINNET_CHAINID,
|
||||||
|
ROPSTEN_CHAINID,
|
||||||
|
RINKEBY_CHAINID,
|
||||||
|
KOVAN_CHAINID,
|
||||||
|
GOERLI_TESTNET_CHAINID,
|
||||||
|
POA_CHAINID,
|
||||||
|
DAI_CHAINID,
|
||||||
|
POA_SOKOL_CHAINID,
|
||||||
DAI,
|
DAI,
|
||||||
POA_SOKOL,
|
POA_SOKOL,
|
||||||
MAINNET,
|
MAINNET,
|
||||||
|
|
|
@ -10,6 +10,7 @@ const createMetamaskMiddleware = require('./createMetamaskMiddleware')
|
||||||
const createInfuraClient = require('./createInfuraClient')
|
const createInfuraClient = require('./createInfuraClient')
|
||||||
const createJsonRpcClient = require('./createJsonRpcClient')
|
const createJsonRpcClient = require('./createJsonRpcClient')
|
||||||
const createLocalhostClient = require('./createLocalhostClient')
|
const createLocalhostClient = require('./createLocalhostClient')
|
||||||
|
const createPocketClient = require('./createPocketClient')
|
||||||
const { createSwappableProxy, createEventEmitterProxy } = require('swappable-obj-proxy')
|
const { createSwappableProxy, createEventEmitterProxy } = require('swappable-obj-proxy')
|
||||||
const ethNetProps = require('eth-net-props')
|
const ethNetProps = require('eth-net-props')
|
||||||
const parse = require('url-parse')
|
const parse = require('url-parse')
|
||||||
|
@ -36,6 +37,7 @@ const {
|
||||||
RSK_TESTNET_CODE,
|
RSK_TESTNET_CODE,
|
||||||
} = require('./enums')
|
} = require('./enums')
|
||||||
const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET]
|
const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET]
|
||||||
|
const POCKET_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET, POA, DAI, GOERLI_TESTNET, POA_SOKOL]
|
||||||
|
|
||||||
const env = process.env.METAMASK_ENV
|
const env = process.env.METAMASK_ENV
|
||||||
const METAMASK_DEBUG = process.env.METAMASK_DEBUG
|
const METAMASK_DEBUG = process.env.METAMASK_DEBUG
|
||||||
|
@ -55,7 +57,8 @@ module.exports = class NetworkController extends EventEmitter {
|
||||||
// create stores
|
// create stores
|
||||||
this.providerStore = new ObservableStore(providerConfig)
|
this.providerStore = new ObservableStore(providerConfig)
|
||||||
this.networkStore = new ObservableStore('loading')
|
this.networkStore = new ObservableStore('loading')
|
||||||
this.store = new ComposedStore({ provider: this.providerStore, network: this.networkStore })
|
this.dProviderStore = new ObservableStore({dProvider: false})
|
||||||
|
this.store = new ComposedStore({ provider: this.providerStore, network: this.networkStore, dProviderStore: this.dProviderStore })
|
||||||
this.on('networkDidChange', this.lookupNetwork)
|
this.on('networkDidChange', this.lookupNetwork)
|
||||||
// provider and block tracker
|
// provider and block tracker
|
||||||
this._provider = null
|
this._provider = null
|
||||||
|
@ -152,6 +155,16 @@ module.exports = class NetworkController extends EventEmitter {
|
||||||
return this.providerStore.getState()
|
return this.providerStore.getState()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getDProvider(){
|
||||||
|
return this.dProviderStore.getState().dProvider
|
||||||
|
}
|
||||||
|
|
||||||
|
setDProvider(key){
|
||||||
|
this.dProviderStore.updateState({
|
||||||
|
dProvider: key,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Private
|
// Private
|
||||||
//
|
//
|
||||||
|
@ -166,17 +179,28 @@ module.exports = class NetworkController extends EventEmitter {
|
||||||
const { type, rpcTarget } = opts
|
const { type, rpcTarget } = opts
|
||||||
// infura type-based endpoints
|
// infura type-based endpoints
|
||||||
const isInfura = INFURA_PROVIDER_TYPES.includes(type)
|
const isInfura = INFURA_PROVIDER_TYPES.includes(type)
|
||||||
if (isInfura) {
|
// pocket type-based endpointes
|
||||||
this._configureInfuraProvider(opts)
|
const isPocket = POCKET_PROVIDER_TYPES.includes(type)
|
||||||
|
|
||||||
|
if (!isPocket && this.dProviderStore.getState().dProvider){
|
||||||
|
this.dProviderStore.updateState({
|
||||||
|
dProvider: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isPocket && this.dProviderStore.getState().dProvider){
|
||||||
|
this._configurePocketProvider(opts)
|
||||||
|
} else if (isInfura) {
|
||||||
|
this._configureInfuraProvider(opts)
|
||||||
// other type-based rpc endpoints
|
// other type-based rpc endpoints
|
||||||
} else if (type === POA) {
|
} else if (type === POA) {
|
||||||
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_CODE)[0] })
|
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_CODE)[0] })
|
||||||
} else if (type === DAI) {
|
} else if (type === DAI) {
|
||||||
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(DAI_CODE)[0] })
|
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(DAI_CODE)[0] })
|
||||||
} else if (type === POA_SOKOL) {
|
} else if (type === POA_SOKOL) {
|
||||||
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_SOKOL_CODE)[0] })
|
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(POA_SOKOL_CODE)[0] })
|
||||||
} else if (type === GOERLI_TESTNET) {
|
} else if (type === GOERLI_TESTNET) {
|
||||||
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(GOERLI_TESTNET_CODE)[0] })
|
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(GOERLI_TESTNET_CODE)[0] })
|
||||||
} else if (type === CLASSIC) {
|
} else if (type === CLASSIC) {
|
||||||
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(CLASSIC_CODE)[0] })
|
this._configureStandardProvider({ rpcUrl: ethNetProps.RPCEndpoints(CLASSIC_CODE)[0] })
|
||||||
} else if (type === RSK) {
|
} else if (type === RSK) {
|
||||||
|
@ -199,6 +223,12 @@ module.exports = class NetworkController extends EventEmitter {
|
||||||
this._setNetworkClient(networkClient)
|
this._setNetworkClient(networkClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_configurePocketProvider ({ type }) {
|
||||||
|
log.info('NetworkController - configurePocketProvider', type)
|
||||||
|
const networkClient = createPocketClient({ network: type })
|
||||||
|
this._setNetworkClient(networkClient)
|
||||||
|
}
|
||||||
|
|
||||||
_configureLocalhostProvider () {
|
_configureLocalhostProvider () {
|
||||||
log.info('NetworkController - configureLocalhostProvider')
|
log.info('NetworkController - configureLocalhostProvider')
|
||||||
const networkClient = createLocalhostClient()
|
const networkClient = createLocalhostClient()
|
||||||
|
|
|
@ -370,6 +370,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
||||||
setCurrentCoin: this.setCurrentCoin.bind(this),
|
setCurrentCoin: this.setCurrentCoin.bind(this),
|
||||||
setUseBlockie: this.setUseBlockie.bind(this),
|
setUseBlockie: this.setUseBlockie.bind(this),
|
||||||
setCurrentLocale: this.setCurrentLocale.bind(this),
|
setCurrentLocale: this.setCurrentLocale.bind(this),
|
||||||
|
setDProvider: this.setDProvider.bind(this),
|
||||||
markAccountsFound: this.markAccountsFound.bind(this),
|
markAccountsFound: this.markAccountsFound.bind(this),
|
||||||
markPasswordForgotten: this.markPasswordForgotten.bind(this),
|
markPasswordForgotten: this.markPasswordForgotten.bind(this),
|
||||||
unMarkPasswordForgotten: this.unMarkPasswordForgotten.bind(this),
|
unMarkPasswordForgotten: this.unMarkPasswordForgotten.bind(this),
|
||||||
|
@ -1750,6 +1751,20 @@ module.exports = class MetamaskController extends EventEmitter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method for setting a user's preference of decent provider
|
||||||
|
* @param {string} key - boolean for decentralized provider
|
||||||
|
* @param {Function} cb - A callback function called when complete.
|
||||||
|
*/
|
||||||
|
setDProvider (key, cb) {
|
||||||
|
try {
|
||||||
|
this.networkController.setDProvider(key)
|
||||||
|
cb(null)
|
||||||
|
} catch (err) {
|
||||||
|
cb(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A method for initializing storage the first time.
|
* A method for initializing storage the first time.
|
||||||
* @param {Object} initState - The default state to initialize with.
|
* @param {Object} initState - The default state to initialize with.
|
||||||
|
|
|
@ -13,6 +13,17 @@ const exportAsFile = require('./util').exportAsFile
|
||||||
const Modal = require('../../ui/app/components/modals/index').Modal
|
const Modal = require('../../ui/app/components/modals/index').Modal
|
||||||
const ethNetProps = require('eth-net-props')
|
const ethNetProps = require('eth-net-props')
|
||||||
const { networks } = require('../../app/scripts/controllers/network/util')
|
const { networks } = require('../../app/scripts/controllers/network/util')
|
||||||
|
const {
|
||||||
|
ROPSTEN,
|
||||||
|
RINKEBY,
|
||||||
|
KOVAN,
|
||||||
|
MAINNET,
|
||||||
|
POA,
|
||||||
|
DAI,
|
||||||
|
POA_SOKOL,
|
||||||
|
GOERLI_TESTNET,
|
||||||
|
} = require('../../app/scripts/controllers/network/enums')
|
||||||
|
const POCKET_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET, POA, DAI, GOERLI_TESTNET, POA_SOKOL]
|
||||||
|
|
||||||
class ConfigScreen extends Component {
|
class ConfigScreen extends Component {
|
||||||
|
|
||||||
|
@ -20,6 +31,7 @@ class ConfigScreen extends Component {
|
||||||
super(props)
|
super(props)
|
||||||
this.state = {
|
this.state = {
|
||||||
loading: false,
|
loading: false,
|
||||||
|
dProvider: props.metamask.dProviderStore.dProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +44,12 @@ class ConfigScreen extends Component {
|
||||||
const metamaskState = state.metamask
|
const metamaskState = state.metamask
|
||||||
const warning = state.warning
|
const warning = state.warning
|
||||||
|
|
||||||
|
if(state.metamask.dProviderStore.dProvider != this.state.dProvider){
|
||||||
|
this.setState({
|
||||||
|
dProvider: this.props.metamask.dProviderStore.dProvider
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
h('.flex-column.flex-grow', {
|
h('.flex-column.flex-grow', {
|
||||||
style: {
|
style: {
|
||||||
|
@ -184,6 +202,32 @@ class ConfigScreen extends Component {
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
h('p', {
|
||||||
|
style: {
|
||||||
|
fontFamily: 'Nunito Regular',
|
||||||
|
fontSize: '14px',
|
||||||
|
lineHeight: '18px',
|
||||||
|
},
|
||||||
|
}, [
|
||||||
|
'Switch to Decentralized Provider (Pocket)',
|
||||||
|
]),
|
||||||
|
|
||||||
|
h('input', {
|
||||||
|
type:'checkbox',
|
||||||
|
name:'pocket-checkbox',
|
||||||
|
checked: this.state.dProvider,
|
||||||
|
onChange: (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
this.toggleProvider()
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
|
||||||
|
h('hr.horizontal-line', {
|
||||||
|
style: {
|
||||||
|
marginTop: '20px',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
|
||||||
h('div', {
|
h('div', {
|
||||||
style: {
|
style: {
|
||||||
marginTop: '20px',
|
marginTop: '20px',
|
||||||
|
@ -233,6 +277,26 @@ class ConfigScreen extends Component {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleProvider(){
|
||||||
|
const isPocket = POCKET_PROVIDER_TYPES.includes(this.props.metamask.provider.type)
|
||||||
|
if (isPocket){
|
||||||
|
if (!this.state.dProvider){
|
||||||
|
this.props.dispatch(actions.setDProvider(true))
|
||||||
|
this.setState({
|
||||||
|
dProvider: true
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.props.dispatch(actions.setDProvider(false))
|
||||||
|
this.setState({
|
||||||
|
dProvider: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.props.dispatch(actions.setProviderType(this.props.metamask.provider.type))
|
||||||
|
} else {
|
||||||
|
alert("Pocket does not support this network, using centralized provider")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
componentWillUnmount () {
|
componentWillUnmount () {
|
||||||
this.props.dispatch(actions.displayWarning(''))
|
this.props.dispatch(actions.displayWarning(''))
|
||||||
}
|
}
|
||||||
|
@ -306,7 +370,6 @@ class ConfigScreen extends Component {
|
||||||
}, 'Delete'),
|
}, 'Delete'),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function mapStateToProps (state) {
|
function mapStateToProps (state) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -81,6 +81,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@babel/core": "^7.5.0",
|
||||||
"@material-ui/core": "^4.1.1",
|
"@material-ui/core": "^4.1.1",
|
||||||
"@zxing/library": "^0.8.0",
|
"@zxing/library": "^0.8.0",
|
||||||
"abi-decoder": "^1.0.9",
|
"abi-decoder": "^1.0.9",
|
||||||
|
@ -148,6 +149,7 @@
|
||||||
"inject-css": "^0.1.1",
|
"inject-css": "^0.1.1",
|
||||||
"json-rpc-engine": "^4.0.0",
|
"json-rpc-engine": "^4.0.0",
|
||||||
"json-rpc-middleware-stream": "^2.1.0",
|
"json-rpc-middleware-stream": "^2.1.0",
|
||||||
|
"json-rpc-pocket": "0.0.1",
|
||||||
"jsonschema": "^1.2.4",
|
"jsonschema": "^1.2.4",
|
||||||
"lodash.debounce": "^4.0.8",
|
"lodash.debounce": "^4.0.8",
|
||||||
"lodash.shuffle": "^4.2.0",
|
"lodash.shuffle": "^4.2.0",
|
||||||
|
|
|
@ -319,6 +319,10 @@ var actions = {
|
||||||
SET_USE_BLOCKIE: 'SET_USE_BLOCKIE',
|
SET_USE_BLOCKIE: 'SET_USE_BLOCKIE',
|
||||||
setUseBlockie,
|
setUseBlockie,
|
||||||
|
|
||||||
|
// DProvider
|
||||||
|
SET_DPROVIDER: 'SET_DPROVIDER',
|
||||||
|
setDProvider,
|
||||||
|
|
||||||
// locale
|
// locale
|
||||||
SET_CURRENT_LOCALE: 'SET_CURRENT_LOCALE',
|
SET_CURRENT_LOCALE: 'SET_CURRENT_LOCALE',
|
||||||
SET_LOCALE_MESSAGES: 'SET_LOCALE_MESSAGES',
|
SET_LOCALE_MESSAGES: 'SET_LOCALE_MESSAGES',
|
||||||
|
@ -2648,6 +2652,23 @@ function updateCurrentLocale (key) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setDProvider (val) {
|
||||||
|
return (dispatch) => {
|
||||||
|
dispatch(actions.showLoadingIndication())
|
||||||
|
log.debug(`background.setDProvider`)
|
||||||
|
background.setDProvider(val, (err) => {
|
||||||
|
dispatch(actions.hideLoadingIndication())
|
||||||
|
if (err) {
|
||||||
|
return dispatch(actions.displayWarning(err.message))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
dispatch({
|
||||||
|
type: actions.SET_DPROVIDER,
|
||||||
|
value: val,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setCurrentLocale (key) {
|
function setCurrentLocale (key) {
|
||||||
return {
|
return {
|
||||||
type: actions.SET_CURRENT_LOCALE,
|
type: actions.SET_CURRENT_LOCALE,
|
||||||
|
|
|
@ -352,6 +352,13 @@ function reduceMetamask (state, action) {
|
||||||
welcomeScreenSeen: true,
|
welcomeScreenSeen: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
case actions.SET_DPROVIDER:
|
||||||
|
return extend(metamaskState, {
|
||||||
|
dProviderStore: {
|
||||||
|
dProvider : action.value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
case actions.SET_CURRENT_LOCALE:
|
case actions.SET_CURRENT_LOCALE:
|
||||||
return extend(metamaskState, {
|
return extend(metamaskState, {
|
||||||
currentLocale: action.value,
|
currentLocale: action.value,
|
||||||
|
|
Loading…
Reference in New Issue