aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib/zero.js
blob: d33f099d3dd043a64797f97d94c879d83dbb894c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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

}