@bitski/provider-engine

中文文档
0.8.0发布于 2022/08/29MITTypeScriptESM + CJS近 30 天下载 2616

Bitski's ProviderEngine is a refactored version of Metamask's original provider engine library. This is the base of the Bitski Javascript SDKs (both browser and node).

原始使用文档
文档目录6 节
  1. Installation
  2. Differences from original package
  3. To Do
  4. Composable
  5. Writing your own Subprovider
  6. Acknowlegements

Bitski ProviderEngine

Bitski's ProviderEngine is a refactored version of Metamask's original provider engine library. This is the base of the Bitski Javascript SDKs (both browser and node).

Installation

npm install @bitski/provider-engine

Differences from original package

  • Written in Typescript
  • Standard ES6 modules, designed for the browser first
  • Designed to be extended with a properly exported Subprovider interface
  • Base class implements new EthereumProvider standard
  • Compatible with latest versions of web3.js
  • Heavier dependencies removed to keep base package light (primarily all dependencies that rely on elliptic)
  • Many small bug fixes and improvements

To Do

  • Reimplement HookedWalletSubprovider as a separate package
  • Reimplement VmSubprovider as a separate package
  • Reimplement NonceTracker as a separate package
  • Improve test coverage

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.

import {
  default as ProviderEngine,
  BlockCacheSubprovider,
  FixtureSubprovider,
  FilterSubprovider,
  FetchSubprovider
} from '@bitski/provider-engine';

const engine = new ProviderEngine();
const 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 BlockCacheSubprovider());

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

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

// log new blocks
engine.on('block', (block) => {
  console.log('================================')
  console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex'))
  console.log('================================')
});

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

// start polling for blocks
engine.start();

Writing your own Subprovider

It's easy to extend the functionality of this module by writing your own Subprovider instance.

See src/subprovider.ts for the full interface.

import { Subprovider } from '@bitski/provider-engine';

export default class MySubprovider extends Subprovider {

  // Only requirement is to implement handleRequest
  public handleRequest(payload, next, end) {
    // The payload includes the original JSON RPC request
    if (payload.method === 'eth_helloWorld') {
      // Call end() to handle the request in this subprovider
      end('hello world!');
    } else {
      // Call next() to fall-through to the next request in the stack
      next();
    }
  }

}

Acknowlegements

A special thanks to the folks at Metamask who conceived and wrote the original library.

版本与发布记录

@bitski/provider-engine 共发布 29 个版本,首次发布于 2019/05/18;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.8.0latest2022/08/294 年前
0.7.0-beta.52022/06/304 年前
0.7.0-beta.42022/06/294 年前
0.7.0-beta.32022/06/284 年前
0.7.0-beta.22021/04/175 年前
0.7.0-beta.1beta2020/09/186 年前

关于 @bitski/provider-engine 的常见问题

@bitski/provider-engine 是什么?

Bitski's ProviderEngine is a refactored version of Metamask's original provider engine library. This is the base of the Bitski Javascript SDKs (both browser and node).

如何安装 @bitski/provider-engine?

在项目目录运行 npm install @bitski/provider-engine,或使用 pnpm add / yarn add / bun add。

@bitski/provider-engine 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bitski/provider-engine 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@bitski/provider-engine 可以商用吗?

@bitski/provider-engine 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bitski/provider-engine 的下载量有多少?

根据 npm 官方下载统计,@bitski/provider-engine 在 2026/10/08 – 2026/11/06 这 30 天内被下载 2,616 次,日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bitski/provider-engine 还在维护吗?

最新版本 0.8.0 发布于 2022/08/29(4 年前);至今共发布 29 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/05/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。