安装和使用
1 | npm install web3 --save |
- web3下面的api是分部在不同的命名空间的
1 | // 可以全局用 |
API
web3.eth
1 | web3.eth.getTransactionCount('0x...') // 获取用户的transaction数量 |
web3.eth.accounts
1 | const account web3.eth.accounts.privateKeyToAccount('0xaaaaa'); // 通过私钥获取账户信息 |
web3.eth.contract
调用智能合约
1 | // 初始化 |
web3.eth.net
1 | web3.eth.net.isListening() // 代替低版本的isConnected() |
events事件监听
1 | // 这里的eventName就是在solidity中定义的事件的名称 |
BN大数类型
- 很多web3相关的库都会用到BN大数类型这个库(BigNumber.js)
1 | var num = BigNumber.clone() |
Troubleshooting
Web3 is undfeind / TypeError: Cannot read property ‘providers’ of undefined: typescript里面遇到这个问题,可以用
(Web3 as any)
代替replacement transaction underpriced: 我遇到两种情况:
一是提交transaction的时候nonce设置为了一样的,并且gas fee也一样,所以会报错,要么nonce不一样,如果真的要在之前的操作确认前进行覆盖,必须提高gas fee人家才愿意先挖你这个。
二是无论怎样提高gas price,transaction依然在queued队列中(注意不是pending),原因是nonce没有连续(可能是由于在geth中清空了transaction导致的或者乱修改nonce导致的),queued中的nonce和getTransactionCount
的nonce值中间有空的,这个时候尝试调用其他的transaction,直到nonce连续为止就能执行了在前端集成的时候出现proces is not devined的问题: 我是在vite框架中遇到的,解决办法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 在index.html中添加
<script type="module">
window.global = window;
import process from "process";
import { Buffer } from "buffer";
window.process = process;
window.Buffer = Buffer;
</script>
// 在vite.config.ts中添加npm install agent-base process
resolve: {
alias: {
process: 'process/browser',
util: 'util',
https: 'agent-base',
http: 'agent-base',
zlib: 'browserify-zlib'
}
},