Add custom zeroclient that supports etherscan (still not working)

The Etherscan Subprovider is not providing some methods we need, such as `eth_getCode`. I'll probably be enhancing it after lunch.
This commit is contained in:
Dan Finlay 2016-03-31 12:30:27 -07:00
parent d9cadb9efb
commit 091938a2c5
2 changed files with 68 additions and 11 deletions

View File

@ -6,8 +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 EtherscanProvider = require('web3-provider-engine/subproviders/etherscan')
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')
@ -48,16 +47,9 @@ var providerOpts = {
},
approveTransaction: addUnconfirmedTx,
signTransaction: idStore.signTransaction.bind(idStore),
etherscan: providerConfig.type === 'etherscan',
}
var provider
switch (providerConfig.type) {
case 'rpc':
provider = MetaMaskProvider(providerOpts)
break
case 'etherscan':
provider = EtherscanProvider(providerOpts)
break
}
var provider = MetaMaskProvider(providerOpts)
// log new blocks
provider.on('block', function(block){

65
app/scripts/lib/zero.js Normal file
View File

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