web3.js调用智能合约
时间: 2023-05-27 18:01:10 浏览: 98
1. 引入web3.js库
需要先在HTML文件中引入web3.js库,可以从官方网站下载或者使用CDN链接。
```html
<script src="https://cdn.jsdelivr.net/npm/web3@1.3.0/dist/web3.min.js"></script>
```
2. 连接到以太坊网络
在JavaScript代码中,创建一个`Web3`对象并连接到以太坊网络。
```js
// 连接到以太坊网络
const web3 = new Web3(Web3.givenProvider || "http://localhost:8545");
```
其中,`Web3.givenProvider`是指网页已经连接了以太坊网络,可以直接使用当前提供商,否则指定一个本地的以太坊节点地址。
3. 加载智能合约ABI和地址
需要加载智能合约的ABI和地址,以便使用web3.js调用智能合约的方法。
```js
// 加载合约ABI和地址
const contractABI = [...];
const contractAddress = '0x...';
const myContract = new web3.eth.Contract(contractABI, contractAddress);
```
4. 调用智能合约方法
调用智能合约的方法可以使用`myContract.methods`属性,该属性包含了智能合约的所有方法。以调用`get()`方法为例:
```js
// 调用合约get()方法
myContract.methods.get().call((error, result) => {
if (!error) {
console.log(result);
} else {
console.error(error);
}
});
```
其中,`call()`方法表示调用智能合约的读取方法(不改变区块链数据),如果是写入方法需要使用`send()`方法。回调函数返回结果或错误信息。
5. 监听智能合约事件
智能合约的事件可以通过`myContract.events`属性进行监听。以监听`Transfer`事件为例:
```js
// 监听Transfer事件
const transferEvents = myContract.events.Transfer();
transferEvents.on('data', (event) => {
console.log(event.returnValues);
});
transferEvents.on('error', console.error);
```
以上就是使用web3.js调用智能合约的基本流程。涉及到的概念比较复杂,需要深入学习区块链和以太坊相关知识。
相关推荐


















