web3-provider-engine
A JavaScript library for composing Ethereum provider objects using middleware modules
Last updated 2 years ago by lgbot .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install web3-provider-engine 
SYNC missed versions from official npm registry.

Web3 ProviderEngine

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

[!CAUTION] This package has been deprecated.

This package was originally created for MetaMask, but has been replaced by @metamask/json-rpc-engine, @metamask/eth-json-rpc-middleware, @metamask/eth-json-rpc-provider, and various other packages.

Here is an example of how to create a provider using those packages:

import { providerFromMiddleware } from '@metamask/eth-json-rpc-provider';
import { createFetchMiddleware } from '@metamask/eth-json-rpc-middleware';
import { valueToBytes, bytesToBase64 } from '@metamask/utils';
import fetch from 'cross-fetch';

const rpcUrl = '[insert RPC URL here]';

const fetchMiddleware = createFetchMiddleware({
  btoa: (stringToEncode) => bytesToBase64(valueToBytes(stringToEncode)),
  fetch,
  rpcUrl,
});
const provider = providerFromMiddleware(fetchMiddleware);

provider.sendAsync(
  { id: 1, jsonrpc: '2.0', method: 'eth_chainId' },
  (error, response) => {
    if (error) {
      console.error(error);
    } else {
      console.log(response.result);
    }
  }
);

This example was written with v12.1.0 of @metamask/eth-json-rpc-middleware, v3.0.1 of @metamask/eth-json-rpc-provider, and v8.4.0 of @metamask/utils.

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

Current Tags

  • 17.0.1                                ...           latest (2 years ago)

192 Versions

  • 17.0.1                                ...           2 years ago
  • 16.0.8                                ...           2 years ago
  • 17.0.0                                ...           2 years ago
  • 16.0.7 [deprecated]           ...           2 years ago
  • 16.0.6 [deprecated]           ...           2 years ago
  • 16.0.5 [deprecated]           ...           3 years ago
  • 16.0.4 [deprecated]           ...           4 years ago
  • 16.0.3 [deprecated]           ...           5 years ago
  • 16.0.2 [deprecated]           ...           5 years ago
  • 16.0.1 [deprecated]           ...           6 years ago
  • 16.0.0 [deprecated]           ...           6 years ago
  • 15.0.12 [deprecated]           ...           6 years ago
  • 15.0.11 [deprecated]           ...           6 years ago
  • 15.0.10 [deprecated]           ...           6 years ago
  • 15.0.9 [deprecated]           ...           6 years ago
  • 15.0.8 [deprecated]           ...           6 years ago
  • 15.0.7 [deprecated]           ...           6 years ago
  • 15.0.6 [deprecated]           ...           6 years ago
  • 15.0.5 [deprecated]           ...           6 years ago
  • 15.0.4 [deprecated]           ...           6 years ago
  • 15.0.3 [deprecated]           ...           7 years ago
  • 15.0.2 [deprecated]           ...           7 years ago
  • 14.2.1 [deprecated]           ...           7 years ago
  • 15.0.1 [deprecated]           ...           7 years ago
  • 15.0.0 [deprecated]           ...           7 years ago
  • 14.2.0 [deprecated]           ...           7 years ago
  • 14.1.0 [deprecated]           ...           8 years ago
  • 14.0.6 [deprecated]           ...           8 years ago
  • 14.0.5 [deprecated]           ...           8 years ago
  • 14.0.4 [deprecated]           ...           8 years ago
  • 14.0.3 [deprecated]           ...           8 years ago
  • 14.0.2 [deprecated]           ...           8 years ago
  • 14.0.1 [deprecated]           ...           8 years ago
  • 14.0.0 [deprecated]           ...           8 years ago
  • 13.8.0 [deprecated]           ...           8 years ago
  • 13.7.1 [deprecated]           ...           8 years ago
  • 13.7.0 [deprecated]           ...           8 years ago
  • 13.6.6 [deprecated]           ...           8 years ago
  • 13.6.5 [deprecated]           ...           8 years ago
  • 13.6.4 [deprecated]           ...           8 years ago
  • 13.6.3 [deprecated]           ...           8 years ago
  • 13.6.2 [deprecated]           ...           8 years ago
  • 13.6.1 [deprecated]           ...           8 years ago
  • 13.6.0 [deprecated]           ...           8 years ago
  • 13.5.6 [deprecated]           ...           8 years ago
  • 13.5.5 [deprecated]           ...           8 years ago
  • 13.5.4 [deprecated]           ...           8 years ago
  • 13.5.3 [deprecated]           ...           8 years ago
  • 13.5.2 [deprecated]           ...           8 years ago
  • 13.5.1 [deprecated]           ...           8 years ago
  • 13.5.0 [deprecated]           ...           8 years ago
  • 13.4.0 [deprecated]           ...           8 years ago
  • 13.3.4 [deprecated]           ...           8 years ago
  • 13.3.3 [deprecated]           ...           8 years ago
  • 13.3.2 [deprecated]           ...           9 years ago
  • 13.3.1 [deprecated]           ...           9 years ago
  • 13.3.0 [deprecated]           ...           9 years ago
  • 13.2.12 [deprecated]           ...           9 years ago
  • 13.2.11 [deprecated]           ...           9 years ago
  • 13.2.10 [deprecated]           ...           9 years ago
  • 13.2.9 [deprecated]           ...           9 years ago
  • 13.2.8 [deprecated]           ...           9 years ago
  • 13.2.7 [deprecated]           ...           9 years ago
  • 13.2.6 [deprecated]           ...           9 years ago
  • 13.2.5 [deprecated]           ...           9 years ago
  • 13.2.4 [deprecated]           ...           9 years ago
  • 13.2.3 [deprecated]           ...           9 years ago
  • 13.2.2 [deprecated]           ...           9 years ago
  • 13.2.1 [deprecated]           ...           9 years ago
  • 13.2.0 [deprecated]           ...           9 years ago
  • 13.1.1 [deprecated]           ...           9 years ago
  • 13.1.0 [deprecated]           ...           9 years ago
  • 13.0.3 [deprecated]           ...           9 years ago
  • 13.0.2 [deprecated]           ...           9 years ago
  • 13.0.1 [deprecated]           ...           9 years ago
  • 13.0.0 [deprecated]           ...           9 years ago
  • 12.2.4 [deprecated]           ...           9 years ago
  • 12.2.3 [deprecated]           ...           9 years ago
  • 12.2.2 [deprecated]           ...           9 years ago
  • 12.2.1 [deprecated]           ...           9 years ago
  • 12.2.0 [deprecated]           ...           9 years ago
  • 12.1.0 [deprecated]           ...           9 years ago
  • 12.0.6 [deprecated]           ...           9 years ago
  • 12.0.5 [deprecated]           ...           9 years ago
  • 12.0.4 [deprecated]           ...           9 years ago
  • 12.0.3 [deprecated]           ...           9 years ago
  • 12.0.2 [deprecated]           ...           9 years ago
  • 12.0.1 [deprecated]           ...           9 years ago
  • 12.0.0 [deprecated]           ...           9 years ago
  • 11.0.2 [deprecated]           ...           9 years ago
  • 11.0.1 [deprecated]           ...           9 years ago
  • 11.0.0 [deprecated]           ...           9 years ago
  • 10.0.1 [deprecated]           ...           9 years ago
  • 10.0.0 [deprecated]           ...           9 years ago
  • 9.2.1 [deprecated]           ...           9 years ago
  • 9.1.0 [deprecated]           ...           9 years ago
  • 9.0.0 [deprecated]           ...           9 years ago
  • 8.6.1 [deprecated]           ...           9 years ago
  • 8.6.0 [deprecated]           ...           9 years ago
  • 8.5.0 [deprecated]           ...           9 years ago
  • 8.4.0 [deprecated]           ...           9 years ago
  • 8.3.0 [deprecated]           ...           9 years ago
  • 8.2.0 [deprecated]           ...           9 years ago
  • 8.1.19 [deprecated]           ...           9 years ago
  • 8.1.18 [deprecated]           ...           9 years ago
  • 8.1.17 [deprecated]           ...           9 years ago
  • 8.1.16 [deprecated]           ...           9 years ago
  • 8.1.15 [deprecated]           ...           9 years ago
  • 8.1.14 [deprecated]           ...           9 years ago
  • 8.1.13 [deprecated]           ...           9 years ago
  • 8.1.12 [deprecated]           ...           9 years ago
  • 8.1.11 [deprecated]           ...           9 years ago
  • 8.1.10 [deprecated]           ...           9 years ago
  • 8.1.9 [deprecated]           ...           9 years ago
  • 8.1.8 [deprecated]           ...           9 years ago
  • 8.1.7 [deprecated]           ...           9 years ago
  • 8.1.6 [deprecated]           ...           9 years ago
  • 8.1.5 [deprecated]           ...           10 years ago
  • 8.1.4 [deprecated]           ...           10 years ago
  • 8.1.3 [deprecated]           ...           10 years ago
  • 8.1.1 [deprecated]           ...           10 years ago
  • 8.1.0 [deprecated]           ...           10 years ago
  • 8.0.8 [deprecated]           ...           10 years ago
  • 8.0.7 [deprecated]           ...           10 years ago
  • 8.0.6 [deprecated]           ...           10 years ago
  • 8.0.5 [deprecated]           ...           10 years ago
  • 8.0.4 [deprecated]           ...           10 years ago
  • 8.0.3 [deprecated]           ...           10 years ago
  • 8.0.2 [deprecated]           ...           10 years ago
  • 8.0.1 [deprecated]           ...           10 years ago
  • 8.0.0 [deprecated]           ...           10 years ago
  • 7.8.8 [deprecated]           ...           10 years ago
  • 7.8.7 [deprecated]           ...           10 years ago
  • 7.8.6 [deprecated]           ...           10 years ago
  • 7.8.5 [deprecated]           ...           10 years ago
  • 7.8.4 [deprecated]           ...           10 years ago
  • 7.8.3 [deprecated]           ...           10 years ago
  • 7.8.2 [deprecated]           ...           10 years ago
  • 7.8.1 [deprecated]           ...           10 years ago
  • 7.8.0 [deprecated]           ...           10 years ago
  • 7.7.3 [deprecated]           ...           10 years ago
  • 7.7.2 [deprecated]           ...           10 years ago
  • 7.7.1 [deprecated]           ...           10 years ago
  • 7.7.0 [deprecated]           ...           10 years ago
  • 7.6.7 [deprecated]           ...           10 years ago
  • 7.6.6 [deprecated]           ...           10 years ago
  • 7.6.5 [deprecated]           ...           10 years ago
  • 7.6.4 [deprecated]           ...           10 years ago
  • 7.6.3 [deprecated]           ...           10 years ago
  • 7.6.2 [deprecated]           ...           10 years ago
  • 7.6.1 [deprecated]           ...           10 years ago
  • 7.6.0 [deprecated]           ...           10 years ago
  • 7.5.0 [deprecated]           ...           10 years ago
  • 7.4.0 [deprecated]           ...           10 years ago
  • 7.3.0 [deprecated]           ...           10 years ago
  • 7.2.1 [deprecated]           ...           10 years ago
  • 7.2.2 [deprecated]           ...           10 years ago
  • 7.1.1 [deprecated]           ...           10 years ago
  • 7.1.0 [deprecated]           ...           10 years ago
  • 7.0.1 [deprecated]           ...           10 years ago
  • 7.0.0 [deprecated]           ...           10 years ago
  • 6.1.0 [deprecated]           ...           10 years ago
  • 6.0.4 [deprecated]           ...           10 years ago
  • 6.0.3 [deprecated]           ...           10 years ago
  • 6.0.2 [deprecated]           ...           10 years ago
  • 6.0.1 [deprecated]           ...           10 years ago
  • 6.0.0 [deprecated]           ...           10 years ago
  • 5.1.1 [deprecated]           ...           10 years ago
  • 5.1.0 [deprecated]           ...           10 years ago
  • 5.0.2 [deprecated]           ...           10 years ago
  • 5.0.1 [deprecated]           ...           10 years ago
  • 5.0.0 [deprecated]           ...           10 years ago
  • 4.0.1 [deprecated]           ...           10 years ago
  • 4.0.0 [deprecated]           ...           10 years ago
  • 3.4.1 [deprecated]           ...           10 years ago
  • 3.4.0 [deprecated]           ...           10 years ago
  • 3.3.1 [deprecated]           ...           10 years ago
  • 3.3.0 [deprecated]           ...           10 years ago
  • 3.2.3 [deprecated]           ...           10 years ago
  • 3.2.2 [deprecated]           ...           10 years ago
  • 3.2.1 [deprecated]           ...           10 years ago
  • 3.2.0 [deprecated]           ...           10 years ago
  • 3.1.2 [deprecated]           ...           10 years ago
  • 3.1.1 [deprecated]           ...           10 years ago
  • 3.1.0 [deprecated]           ...           10 years ago
  • 3.0.1 [deprecated]           ...           10 years ago
  • 3.0.0 [deprecated]           ...           10 years ago
  • 2.0.0 [deprecated]           ...           10 years ago
  • 1.2.0 [deprecated]           ...           10 years ago
  • 1.1.1 [deprecated]           ...           10 years ago
  • 1.1.0 [deprecated]           ...           10 years ago
  • 1.0.0 [deprecated]           ...           10 years ago
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dev Dependencies (10)
Dependents (2)

Copyright 2013 - present © cnpmjs.org | Home |