web3.js - 这是 连接到通用 JSON-RPC规范的以太坊JavaScript API 。

Created at: 2014-10-01 04:50:37
Language: JavaScript
License: NOASSERTION

网页3.js

web3.js - 以太坊 JavaScript API

不和 堆栈交换 NPM 软件包版本 NPM 软件包下载 构建状态 开发依赖项状态 覆盖范围状态 莱纳 网络化状态

这是以太坊JavaScript API,它连接到通用JSON-RPC规范。

你需要运行本地或远程以太坊节点才能使用此库。

请阅读文档了解更多信息。

安装

节点

npm install web3

yarn add web3

在浏览器中

使用预构建的 ,或使用 web3.js 存储库构建:

dist/web3.min.js

npm run build

然后包含在你的 html 文件中。这将在窗口对象上公开。

dist/web3.min.js
Web3

或者通过 jsDelivr CDN:

<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>

UNPKG:

<script src="https://unpkg.com/web3@latest/dist/web3.min.js"></script>

用法

// In Node.js
const Web3 = require('web3');

let web3 = new Web3('ws://localhost:8546');
console.log(web3);
> {
    eth: ... ,
    shh: ... ,
    utils: ...,
    ...
}

此外,你可以使用以下命令(例如 WebsocketProvider)设置提供程序:

web3.setProvider()

web3.setProvider('ws://localhost:8546');
// or
web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));

你去吧,现在你可以使用它:

web3.eth.getAccounts().then(console.log);

与 TypeScript 的用法

我们支持存储库本身中的类型。如果你发现任何错误的类型,请在此处打开问题。

你可以按如下方式使用:

web3.js

import Web3 from 'web3';
import { BlockHeader, Block } from 'web3-eth' // ex. package types
const web3 = new Web3('ws://localhost:8546');

如果你在模块中使用类型,例如在 Node 应用程序中,则只需启用和类型系统兼容性:

commonjs
esModuleInterop
allowSyntheticDefaultImports
tsconfig

"compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    ....

故障排除和已知问题。

Web3 和 Create-react-app

如果你使用的是 create-react-app 版本 >=5,则可能会在构建时遇到问题。这是因为 NodeJS polyfills 不包含在最新版本的 create-react-app 中。

溶液

  • 安装 react-app-rewired 和缺少的模块

如果你使用的是纱线:

yarn add --dev react-app-rewired process crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer

如果你使用的是 npm:

npm install --save-dev react-app-rewired crypto-browserify stream-browserify assert stream-http https-browserify os-browserify url buffer process
  • 在项目文件夹的根目录中创建内容:
    config-overrides.js
const webpack = require('webpack');

module.exports = function override(config) {
    const fallback = config.resolve.fallback || {};
    Object.assign(fallback, {
        "crypto": require.resolve("crypto-browserify"),
        "stream": require.resolve("stream-browserify"),
        "assert": require.resolve("assert"),
        "http": require.resolve("stream-http"),
        "https": require.resolve("https-browserify"),
        "os": require.resolve("os-browserify"),
        "url": require.resolve("url")
    })
    config.resolve.fallback = fallback;
    config.plugins = (config.plugins || []).concat([
        new webpack.ProvidePlugin({
            process: 'process/browser',
            Buffer: ['buffer', 'Buffer']
        })
    ])
    return config;
}
  • 在更改用于启动、生成和测试的脚本字段中。而不是将其替换为
    package.json
    react-scripts
    react-app-rewired

以前:

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
},

后:

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
},

现在应该包括缺少的Nodejs polyfills,你的应用程序应该可以与web3一起使用。

  • 如果要隐藏控制台创建的警告:

在函数中,添加:

config-overrides.js
override

config.ignoreWarnings = [/Failed to parse source map/];

Web3 和 Angular

新解决方案

如果你使用的是Angular版本>11并遇到问题,则下面的旧解决方案将不起作用。这是因为 polyfills 不包含在最新版本的 Angular 中。

  • 在 Angular 项目中安装所需的依赖项:
npm install --save-dev crypto-browserify stream-browserify assert stream-http https-browserify os-browserify
  • 在中添加以下内容,以便Webpack可以获得正确的依赖项
    tsconfig.json
    paths
    compilerOptions
{
    "compilerOptions": {
        "paths" : {
        "crypto": ["./node_modules/crypto-browserify"],
        "stream": ["./node_modules/stream-browserify"],
        "assert": ["./node_modules/assert"],
        "http": ["./node_modules/stream-http"],
        "https": ["./node_modules/https-browserify"],
        "os": ["./node_modules/os-browserify"],
    }
}
  • 将以下行添加到文件中:
    polyfills.ts
import { Buffer } from 'buffer';

(window as any).global = window;
global.Buffer = Buffer;
global.process = {
    env: { DEBUG: undefined },
    version: '',
    nextTick: require('next-tick')
} as any;

旧解决方案

如果你在版本 >5 上使用 Ionic/Angular,你可能会遇到一个构建错误,其中模块和

crypto
stream
undefined

解决此问题的方法是进入节点模块,并将此处提到的更改为

/angular-cli-files/models/webpack-configs/browser.js
node: false
node: {crypto: true, stream: true}

这个问题的另一个变体是一个关于棱角气候的问题。

文档

文档可以在ReadTheDocs上找到。

建筑

要求

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm

建筑(网络包)

构建 web3.js 包:

npm run build

测试(摩卡)

npm test

贡献

请遵守投稿指南审核指南

此项目遵循发布指南

社区

其他语言的类似库

语义版本控制

从 1.3.0 版开始,此项目将尽可能紧密地遵循 semver。早期版本的次要颠簸可能包括重大行为更改。