Web3 ProviderEngine fork for Embark
Embark fork of Web3 Provider Engine
Web3 ProviderEngine is a tool for composing your own web3 providers.
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 = const CacheSubprovider = const FixtureSubprovider = const FilterSubprovider = const VmSubprovider = const HookedWalletSubprovider = const NonceSubprovider = const RpcSubprovider = var engine = var web3 = engine // static resultsengine // cache layerengine // filtersengine // pending nonceengine // vmengine // id mgmtengine // data sourceengine // log new blocksengine // network connectivity errorengine // start polling for blocksenginestart
When importing in webpack:
;;;
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)
Change Log
14.0.0
- default dataProvider for zero is Infura mainnet REST api
- websocket support
- subscriptions support
- remove solc subprovider
- removed
dist
from git (but published in npm module) - es5 builds in
dist/es5
- zero + ProviderEngine bundles are es5
- web3 subprovider renamed to provider subprovider
- error if provider subprovider is missing a proper provider
- removed need to supply getAccounts hook
- fixed
hooked-wallet-ethtx
message signing - fixed
hooked-wallet
default txParams
13.0.0
- txs included in blocks via
eth-block-tracker
@2.0.0
12.0.0
- moved block polling to
eth-block-tracker
.
11.0.0
- zero.js - replaced http subprovider with fetch provider (includes polyfill for node).
10.0.0
- renamed HookedWalletSubprovider
personalRecoverSigner
torecoverPersonalSignature
9.0.0
pollingShouldUnref
option now defaults to false
Current RPC method support:
static
- web3_clientVersion
- net_version
- net_listening
- net_peerCount
- eth_protocolVersion
- eth_hashrate
- eth_mining
- eth_syncing
filters
- eth_newBlockFilter
- eth_newPendingTransactionFilter
- eth_newFilter
- eth_uninstallFilter
- eth_getFilterLogs
- eth_getFilterChanges
accounts manager
- eth_coinbase
- eth_accounts
- eth_sendTransaction
- eth_sign
- eth_signTypedData
vm
- eth_call
- eth_estimateGas
db source
- db_putString
- db_getString
- db_putHex
- db_getHex
compiler
- eth_getCompilers
- eth_compileLLL
- eth_compileSerpent
- eth_compileSolidity
shh gateway
- shh_version
- shh_post
- shh_newIdentity
- shh_hasIdentity
- shh_newGroup
- shh_addToGroup
data source ( fallback to rpc )
- eth_gasPrice
- eth_blockNumber
- eth_getBalance
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getCode
- eth_getStorageAt
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionByHash
- eth_getTransactionCount
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_sendRawTransaction
- eth_getLogs ( not used in web3.js )
( not supported )
- eth_getWork
- eth_submitWork
- eth_submitHashrate ( not used in web3.js )