这是以太坊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);
我们支持存储库本身中的类型。如果你发现任何错误的类型,请在此处打开问题。
你可以按如下方式使用:
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,
....
如果你使用的是 create-react-app 版本 >=5,则可能会在构建时遇到问题。这是因为 NodeJS polyfills 不包含在最新版本的 create-react-app 中。
如果你使用的是纱线:
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/];
如果你使用的是Angular版本>11并遇到问题,则下面的旧解决方案将不起作用。这是因为 polyfills 不包含在最新版本的 Angular 中。
npm install --save-dev crypto-browserify stream-browserify assert stream-http https-browserify os-browserify
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
此项目遵循发布指南。