17.0.1 • Published 1 year ago

web3-provider-engine v17.0.1

Weekly downloads
66,923
License
MIT
Repository
github
Last release
1 year ago

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
@muhammadwajidshahid/java-tron-providermultichain-walletkit-sdk@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-ideabnc-onboard-metamaskargent-connect-coreopensea-wallet-providerarthcoin.js@nervehammer/springwalletstorage.core.minespider.com@infinitebrahmanuniverse/nolb-web3@everything-registry/sub-chunk-3124temporenemowith-reduxwalletconnect-web3-provider-patchedwalletconnect-web3-providerwallet-connect-providerwanache-corewanchain-truffle-sdkweb3-polyfillweb3-nodejs-providerweb3-vanillaweb3-zeus-providerweb3-walletweb3readywyvern-schemasstar-bit-sdktemp-whitelistsparrow-controllersspectrum-lightsuitetest-whitelisttest-wallet-providersuscipitautemsuscipitiustovitaefugiatveniamenimvault-managervoluptateitaquevoluptasnobisvoluptatumsuntvoluptatumconsequatur@dmihal/hdwallet-provider@doneup/web3-provider@crowdform/flex-connect-sdk@compound-finance/sol-coverage@colligence/aws-kms-provider@digix/etc-redemption@digix/react-trezor-container@digix/sigmate@digix/truffle-lightwallet-provider@dragonereum/contracts@borealisswap/borealis-swap-lib@blockits/controllers@petejkim/ledger-web3-subprovider@rsksmart/dcent-providerkambria-walletipsumsequikeymail-clikevm-ganache-corekafirchain-tetriskeystore-providerklay_safe_onboard@spherex-xyz/poolz-helper-v2undequisuntlaboriosamsuntessesuper-web3-providertypes-web3-provider-enginetruffle-wallet-providertruffle-walletconnect-providertrezor-cli-wallet-providertrezor-web3-subprovidertransmute-frameworktransmute-alphatruffle-anduschain-provider@amra-finance/yin@amuyu/dcent-provider@authereum/bnc-onboard@authereum/web3-provider@authereum/utils@arkane-network/truffle-arkane-provider@afria/afria-libraries@alayanetwork/controllers@alice-network/zos@aeternity/id-manager-provider@bitizenwallet/connector-web3-provider@blocklytics/truffle-ledger-provider@cardstack/wc-provider@cardstack/web-client@catalyst-net-js/truffle-provider@bzxnetwork/portal@burner-wallet/core@cardstack/cardpay-sdk@celo/0x-subproviders@chronobank/login
17.0.1

1 year ago

16.0.8

1 year ago

17.0.0

1 year ago

16.0.7

2 years ago

16.0.6

2 years ago

16.0.5

3 years ago

16.0.4

3 years ago

16.0.3

4 years ago

16.0.2

4 years ago

16.0.1

5 years ago

16.0.0

5 years ago

15.0.12

5 years ago

15.0.11

5 years ago

15.0.10

5 years ago

15.0.8

5 years ago

15.0.9

5 years ago

15.0.7

5 years ago

15.0.6

5 years ago

15.0.5

5 years ago

15.0.4

6 years ago

15.0.3

6 years ago

15.0.2

6 years ago

14.2.1

6 years ago

15.0.1

6 years ago

15.0.0

6 years ago

14.2.0

6 years ago

14.1.0

7 years ago

14.0.6

7 years ago

14.0.5

7 years ago

14.0.4

7 years ago

14.0.3

7 years ago

14.0.2

7 years ago

14.0.1

7 years ago

14.0.0

7 years ago

13.8.0

7 years ago

13.7.1

7 years ago

13.7.0

7 years ago

13.6.6

7 years ago

13.6.5

7 years ago

13.6.4

7 years ago

13.6.3

7 years ago

13.6.2

7 years ago

13.6.1

7 years ago

13.6.0

8 years ago

13.5.6

8 years ago

13.5.5

8 years ago

13.5.4

8 years ago

13.5.3

8 years ago

13.5.2

8 years ago

13.5.1

8 years ago

13.5.0

8 years ago

13.4.0

8 years ago

13.3.4

8 years ago

13.3.3

8 years ago

13.3.2

8 years ago

13.3.1

8 years ago

13.3.0

8 years ago

13.2.12

8 years ago

13.2.11

8 years ago

13.2.10

8 years ago

13.2.9

8 years ago

13.2.8

8 years ago

13.2.7

8 years ago

13.2.6

8 years ago

13.2.5

8 years ago

13.2.4

8 years ago

13.2.3

8 years ago

13.2.2

8 years ago

13.2.1

8 years ago

13.2.0

8 years ago

13.1.1

8 years ago

13.1.0

8 years ago

13.0.3

8 years ago

13.0.2

8 years ago

13.0.1

8 years ago

13.0.0

8 years ago

12.2.4

8 years ago

12.2.3

8 years ago

12.2.2

8 years ago

12.2.1

8 years ago

12.2.0

8 years ago

12.1.0

8 years ago

12.0.6

8 years ago

12.0.5

8 years ago

12.0.4

8 years ago

12.0.3

8 years ago

12.0.2

8 years ago

12.0.1

8 years ago

12.0.0

8 years ago

11.0.2

8 years ago

11.0.1

8 years ago

11.0.0

8 years ago

10.0.1

8 years ago

10.0.0

8 years ago

9.2.1

8 years ago

9.1.0

8 years ago

9.0.0

8 years ago

8.6.1

8 years ago

8.6.0

8 years ago

8.5.0

8 years ago

8.4.0

9 years ago

8.3.0

9 years ago

8.2.0

9 years ago

8.1.19

9 years ago

8.1.18

9 years ago

8.1.17

9 years ago

8.1.16

9 years ago

8.1.15

9 years ago

8.1.14

9 years ago

8.1.13

9 years ago

8.1.12

9 years ago

8.1.11

9 years ago

8.1.10

9 years ago

8.1.9

9 years ago

8.1.8

9 years ago

8.1.7

9 years ago

8.1.6

9 years ago

8.1.5

9 years ago

8.1.4

9 years ago

8.1.3

9 years ago

8.1.1

9 years ago

8.1.0

9 years ago

8.0.8

9 years ago

8.0.7

9 years ago

8.0.6

9 years ago

8.0.5

9 years ago

8.0.4

9 years ago

8.0.3

9 years ago

8.0.2

9 years ago

8.0.1

9 years ago

8.0.0

9 years ago

7.8.8

9 years ago

7.8.7

9 years ago

7.8.6

9 years ago

7.8.5

9 years ago

7.8.4

9 years ago

7.8.3

9 years ago

7.8.2

9 years ago

7.8.1

9 years ago

7.8.0

9 years ago

7.7.3

9 years ago

7.7.2

9 years ago

7.7.1

9 years ago

7.7.0

9 years ago

7.6.7

9 years ago

7.6.6

9 years ago

7.6.5

9 years ago

7.6.4

9 years ago

7.6.3

9 years ago

7.6.2

9 years ago

7.6.1

9 years ago

7.6.0

9 years ago

7.5.0

9 years ago

7.4.0

9 years ago

7.3.0

9 years ago

7.2.1

9 years ago

7.2.2

9 years ago

7.1.1

9 years ago

7.1.0

9 years ago

7.0.1

9 years ago

7.0.0

9 years ago

6.1.0

9 years ago

6.0.4

9 years ago

6.0.3

9 years ago

6.0.2

9 years ago

6.0.1

9 years ago

6.0.0

9 years ago

5.1.1

9 years ago

5.1.0

9 years ago

5.0.2

9 years ago

5.0.1

9 years ago

5.0.0

9 years ago

4.0.1

9 years ago

4.0.0

9 years ago

3.4.1

10 years ago

3.4.0

10 years ago

3.3.1

10 years ago

3.3.0

10 years ago

3.2.3

10 years ago

3.2.2

10 years ago

3.2.1

10 years ago

3.2.0

10 years ago

3.1.2

10 years ago

3.1.1

10 years ago

3.1.0

10 years ago

3.0.1

10 years ago

3.0.0

10 years ago

2.0.0

10 years ago

1.2.0

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.0

10 years ago