Web3.js 是一个用于与以太坊区块链交互的 JavaScript 库。它提供了一整套 API,可用于访问以太坊区块链上的账户、合约以及执行交易。本文将详细介绍 Web3.js 的 API,并提供使用方法和案例说明。
一、Web3.js 的安装和初始化
要使用 Web3.js,首先需要安装它。可以使用 npm 安装,命令如下:
```
npm install web3
```
安装完成后,可以在你的 JavaScript 文件中引入 Web3.js:
```
const Web3 = require('web3');
```
然后,可以通过以下方式进行初始化:
```
// 使用 Infura 节点初始化
const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'));
// 或者使用本地节点初始化
const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
```
在上述代码中,可以选择使用 Infura 节点或本地节点来初始化 Web3.js 实例。
二、账户操作
1. 获取账户列表
使用 `web3.eth.getAccounts()` 可以获取当前节点上的所有账户列表。例如:
```
web3.eth.getAccounts()
.then(accounts => {
console.log(accounts);
})
.catch(err => {
console.error(err);
});
```
2. 创建账户
使用 `web3.eth.accounts.create()` 可以创建一个新的账户。例如:
```
const newAccount = web3.eth.accounts.create();
console.log(newAccount.address); // 输出新账户的地址
console.log(newAccount.privateKey); // 输出新账户的私钥
```
3. 获取账户余额
使用 `web3.eth.getBalance()` 可以获取指定账户的以太币余额。例如:
```
web3.eth.getBalance('0x0123456789abcdef...')
.then(balance => {
console.log(balance); // 输出账户余额
})
.catch(err => {
console.error(err);
});
```
三、合约操作
1. 部署合约
使用 `web3.eth.Contract` 可以创建一个新的合约对象,并使用 `new` 关键字部署合约。例如:
```
const myContract = new web3.eth.Contract(abi);
myContract.deploy({
data: '0x1234567890abcdef...',
arguments: [param1, param2, ...]
})
.send({
from: '0x0123456789abcdef...',
gas: 1500000,
gasPrice: '30000000000'
})
.then(newContractInstance => {
console.log(newContractInstance.options.address); // 输出新合约的地址
})
.catch(err => {
console.error(err);
});
```
这段代码中,我们首先创建了一个合约对象 `myContract`,然后使用 `deploy` 方法来部署合约,并指定部署合约的参数。
2. 调用合约方法
使用合约对象的方法来调用合约方法。例如:
```
myContract.methods.myMethod(param1, param2, ...)
.send({
from: '0x0123456789abcdef...',
gas: 1500000,
gasPrice: '30000000000'
})
.then(receipt => {
console.log(receipt); // 输出交易收据
})
.catch(err => {
console.error(err);
});
```
这段代码中,我们调用了合约的 `myMethod` 方法,并且指定了调用合约方法的参数。
四、交易操作
1. 发送交易
使用 `web3.eth.sendTransaction` 方法发送一笔交易。例如:
```
web3.eth.sendTransaction({
from: '0x0123456789abcdef...',
to: '0x9876543210fedcba...',
value: '1000000000000000000', // 1 ETH
gas: 21000,
gasPrice: '30000000000',
})
.on('transactionHash', hash => {
console.log(hash); // 输出交易哈希值
})
.on('receipt', receipt => {
console.log(receipt); // 输出交易收据
})
.on('confirmation', (confirmationNumber, receipt) => {
console.log(confirmationNumber); // 输出确认次数
})
.on('error', err => {
console.error(err);
});
```
2. 监听交易状态
可以使用 `web3.eth.getTransactionReceipt` 方法来获取交易收据,从而获得交易的状态信息。例如:
```
web3.eth.getTransactionReceipt('0x0123456789abcdef...')
.then(receipt => {
console.log(receipt); // 输出交易收据
})
.catch(err => {
console.error(err);
});
```
以上就是 Web3.js 的一些常用 API 的介绍和使用方法。下面,我们将通过案例来说明这些API的用法。
案例一:查询账户余额
```
web3.eth.getBalance('0x0123456789abcdef...')
.then(balance => {
console.log(`账户余额为:${web3.utils.fromWei(balance, 'ether')} ETH`);
})
.catch(err => {
console.error(err);
});
```
案例二:查询合约方法返回值
```
myContract.methods.myMethod(param1, param2, ...)
.call({
from: '0x0123456789abcdef...'
})
.then(result => {
console.log(`方法返回值为:${result}`);
})
.catch(err => {
console.error(err);
});
```
案例三:监听合约事件
```
myContract.events.MyEvent()
.on('data', event => {
console.log(`收到事件:${event}`);
})
.on('error', err => {
console.error(err);
});
```
以上案例介绍了 Web3.js 的一些常见用法,包括账户操作、合约操作和交易操作。希望通过以上内容可以帮助您更好地理解和使用 Web3.js。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/
发表评论 取消回复