16.0.3 • Published 2 months ago

web3-provider-engine v16.0.3

Weekly downloads
66,923
License
MIT
Repository
github
Last release
2 months ago

Web3 ProviderEngine

Web3 ProviderEngine is a tool for composing your own web3 providers.

Originally created for MetaMask, but has been superceded by json-rpc-engine in combination with our eth-json-rpc-middleware. This module is not very actively maintained, so we recommend using that one instead.

Composable

Built to be modular - works via a stack of 'sub-providers' which are like normal web3 providers but only handle a subset of rpc methods.

The subproviders can emit new rpc requests in order to handle their own; e.g. eth_call may trigger eth_getAccountBalance, eth_getCode, and others. The provider engine also handles caching of rpc request results.

const ProviderEngine = require('web3-provider-engine')
const CacheSubprovider = require('web3-provider-engine/subproviders/cache.js')
const FixtureSubprovider = require('web3-provider-engine/subproviders/fixture.js')
const FilterSubprovider = require('web3-provider-engine/subproviders/filters.js')
const VmSubprovider = require('web3-provider-engine/subproviders/vm.js')
const HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet.js')
const NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker.js')
const RpcSubprovider = require('web3-provider-engine/subproviders/rpc.js')

var engine = new ProviderEngine()
var web3 = new Web3(engine)

// static results
engine.addProvider(new FixtureSubprovider({
  web3_clientVersion: 'ProviderEngine/v0.0.0/javascript',
  net_listening: true,
  eth_hashrate: '0x00',
  eth_mining: false,
  eth_syncing: true,
}))

// cache layer
engine.addProvider(new CacheSubprovider())

// filters
engine.addProvider(new FilterSubprovider())

// pending nonce
engine.addProvider(new NonceSubprovider())

// vm
engine.addProvider(new VmSubprovider())

// id mgmt
engine.addProvider(new HookedWalletSubprovider({
  getAccounts: function(cb){ ... },
  approveTransaction: function(cb){ ... },
  signTransaction: function(cb){ ... },
}))

// data source
engine.addProvider(new RpcSubprovider({
  rpcUrl: 'https://testrpc.metamask.io/',
}))

// 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('================================')
})

// network connectivity error
engine.on('error', function(err){
  // report connectivity errors
  console.error(err.stack)
})

// start polling for blocks
engine.start()

When importing in webpack:

import * as Web3ProviderEngine  from 'web3-provider-engine';
import * as RpcSource  from 'web3-provider-engine/subproviders/rpc';
import * as HookedWalletSubprovider from 'web3-provider-engine/subproviders/hooked-wallet';

Built For Zero-Clients

The Ethereum JSON RPC was not designed to have one node service many clients. However a smaller, lighter subset of the JSON RPC can be used to provide the blockchain data that an Ethereum 'zero-client' node would need to function. We handle as many types of requests locally as possible, and just let data lookups fallback to some data source ( hosted rpc, blockchain api, etc ). Categorically, we don’t want / can’t have the following types of RPC calls go to the network:

  • id mgmt + tx signing (requires private data)
  • filters (requires a stateful data api)
  • vm (expensive, hard to scale)

Running tests

yarn test
@aquiladev/truffle-wallet-connect-providerarisenidjs-trial-version2-web3@amra-finance/ding@amra-finance/ding-plugin-ledger-web@amra-finance/ding-plugin-trezor-webweb3-yeetdrawer-farmer-wealth-ideaselfkey-stakingpoolz-backpoolz-benefitpoolz-helperpoolz-whitelistauthereum@shardlabs/ganache-core@hancock/sdk-client-nodejs@hancock/sdk-nodejs@rumblefishdev/eth-signer-kms@hardfork/trezor-wallet-provider@rarible/trezor-providerband-wallet@web3connect/trezor-provider@web3modal/ledger-provider@web3modal/trezor-provider@web3connect/ledger-provider@growthdefi/_mor@growthdefi/mor@scatterjs/web3@shyftnetwork/shyft_ganache-corepanthalassaopen-registry-sdkarthcoin.jsarchi-controllersarchi-onboardargent-connect-corewyvern-schemas@rgbk/api@rguikers/rbwalletprovideraws-kms-providerauthcore-js@rigoblock/api@radarrelay/web3-builder@radarrelay/sdk@radarrelay/subproviderszap-termwith-redux@qubic-js/corebitski-truffle-providerqos-registry-sdk@tokenfoundry/wallet-provider@daonomic/trezor-wallet-provider@walletconnect/web3-provider@walletconnect/web3-subprovider@walletpack/ethereum@wanchainmask/controllers@walletconnect/truffle-provider@vvvictorlee2020/ethereum@velma/ganache-core@wanswap/subproviders@ujoteam/card@tracer-protocol/onboard@truffle-types/web3-subproviders@truffle/sawtooth-seth-provider@compound-finance/sol-coverage@coolwallets/web3-subproviderradar-relay-sdk@xdcx/subproviders@snapshot-labs/portisbnc-onboardbnc-onboard-custombnc-onboard-metamaskgabadharma-clieth-dexcore-jseth-core-jseth-vueeth-storeeth-rpc-clienteth-saddleethdeploy-provider-zero-clientethereum-managerethereumjs-testrpc-persistethkitscatter-jsscatterjs-plugin-web3@joincivil/dev-utilsshiplshipl-sdkshipl-wallet@jarvis-network/ledger-web3-providershadows-truffle-hdwallet-provider-privkey@keyko-io/multisigwallet@keystonehq/keystone-connectorspectrum-lightsuite@linkdrop-widget/provider@kosu/contract-helpers@kosu/kosu.js@kosu/migrations@kosu/solidity-tests@kosu/system-contracts@levino/trezor-wallet-provider
16.0.3

2 months ago

16.0.2

3 months ago

16.0.1

1 year ago

16.0.0

1 year ago

15.0.12

1 year ago

15.0.11

1 year ago

15.0.10

1 year ago

15.0.8

1 year ago

15.0.9

1 year ago

15.0.7

1 year ago

15.0.6

2 years ago

15.0.5

2 years ago

15.0.4

2 years ago

15.0.3

2 years ago

15.0.2

2 years ago

14.2.1

2 years ago

15.0.1

2 years ago

15.0.0

3 years ago

14.2.0

3 years ago

14.1.0

3 years ago

14.0.6

3 years ago

14.0.5

3 years ago

14.0.4

3 years ago

14.0.3

3 years ago

14.0.2

3 years ago

14.0.1

3 years ago

14.0.0

3 years ago

13.8.0

4 years ago

13.7.1

4 years ago

13.7.0

4 years ago

13.6.6

4 years ago

13.6.5

4 years ago

13.6.4

4 years ago

13.6.3

4 years ago

13.6.2

4 years ago

13.6.1

4 years ago

13.6.0

4 years ago

13.5.6

4 years ago

13.5.5

4 years ago

13.5.4

4 years ago

13.5.3

4 years ago

13.5.2

4 years ago

13.5.1

4 years ago

13.5.0

4 years ago

13.4.0

4 years ago

13.3.4

4 years ago

13.3.3

4 years ago

13.3.2

4 years ago

13.3.1

4 years ago

13.3.0

4 years ago

13.2.12

4 years ago

13.2.11

4 years ago

13.2.10

4 years ago

13.2.9

4 years ago

13.2.8

4 years ago

13.2.7

4 years ago

13.2.6

4 years ago

13.2.5

4 years ago

13.2.4

4 years ago

13.2.3

4 years ago

13.2.2

4 years ago

13.2.1

4 years ago

13.2.0

4 years ago

13.1.1

4 years ago

13.1.0

4 years ago

13.0.3

4 years ago

13.0.2

4 years ago

13.0.1

4 years ago

13.0.0

4 years ago

12.2.4

4 years ago

12.2.3

4 years ago

12.2.2

4 years ago

12.2.1

4 years ago

12.2.0

4 years ago

12.1.0

4 years ago

12.0.6

4 years ago

12.0.5

4 years ago

12.0.4

4 years ago

12.0.3

4 years ago

12.0.2

4 years ago

12.0.1

4 years ago

12.0.0

4 years ago

11.0.2

5 years ago

11.0.1

5 years ago

11.0.0

5 years ago

10.0.1

5 years ago

10.0.0

5 years ago

9.2.1

5 years ago

9.1.0

5 years ago

9.0.0

5 years ago

8.6.1

5 years ago

8.6.0

5 years ago

8.5.0

5 years ago

8.4.0

5 years ago

8.3.0

5 years ago

8.2.0

5 years ago

8.1.19

5 years ago

8.1.18

5 years ago

8.1.17

5 years ago

8.1.16

5 years ago

8.1.15

5 years ago

8.1.14

5 years ago

8.1.13

5 years ago

8.1.12

5 years ago

8.1.11

5 years ago

8.1.10

5 years ago

8.1.9

5 years ago

8.1.8

5 years ago

8.1.7

5 years ago

8.1.6

5 years ago

8.1.5

5 years ago

8.1.4

5 years ago

8.1.3

5 years ago

8.1.1

5 years ago

8.1.0

5 years ago

8.0.8

5 years ago

8.0.7

5 years ago

8.0.6

5 years ago

8.0.5

5 years ago

8.0.4

5 years ago

8.0.3

5 years ago

8.0.2

5 years ago

8.0.1

5 years ago

8.0.0

5 years ago

7.8.8

5 years ago

7.8.7

5 years ago

7.8.6

5 years ago

7.8.5

5 years ago

7.8.4

5 years ago

7.8.3

5 years ago

7.8.2

5 years ago

7.8.1

5 years ago

7.8.0

5 years ago

7.7.3

5 years ago

7.7.2

5 years ago

7.7.1

5 years ago

7.7.0

5 years ago

7.6.7

5 years ago

7.6.6

5 years ago

7.6.5

5 years ago

7.6.4

5 years ago

7.6.3

5 years ago

7.6.2

5 years ago

7.6.1

5 years ago

7.6.0

5 years ago

7.5.0

5 years ago

7.4.0

5 years ago

7.3.0

5 years ago

7.2.1

5 years ago

7.2.2

5 years ago

7.1.1

6 years ago

7.1.0

6 years ago

7.0.1

6 years ago

7.0.0

6 years ago

6.1.0

6 years ago

6.0.4

6 years ago

6.0.3

6 years ago

6.0.2

6 years ago

6.0.1

6 years ago

6.0.0

6 years ago

5.1.1

6 years ago

5.1.0

6 years ago

5.0.2

6 years ago

5.0.1

6 years ago

5.0.0

6 years ago

4.0.1

6 years ago

4.0.0

6 years ago

3.4.1

6 years ago

3.4.0

6 years ago

3.3.1

6 years ago

3.3.0

6 years ago

3.2.3

6 years ago

3.2.2

6 years ago

3.2.1

6 years ago

3.2.0

6 years ago

3.1.2

6 years ago

3.1.1

6 years ago

3.1.0

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.0.0

6 years ago

1.2.0

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago