前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过web3.js与以太坊客户端进行交互

通过web3.js与以太坊客户端进行交互

原创
作者头像
JavaEdge
发布2024-07-27 21:44:28
1340
发布2024-07-27 21:44:28

1 web3.js简介

web3.js是一个js API库。要使DApp在以太坊上运行,可用web3.js库提供的web3对象。

web3.js通过RPC调用与本地节点通信,它可用于任何暴露了RPC层的以太坊节点。web3包含eth对象-web3.eth(专门与以太坊区块链交互)和shh对象-web3.shh(用于与Whisper交互)。

2 web3模块加载

首先需要将web3模块安装在项目中:

代码语言:bash
复制
npm install web3@0.20.1

然后创建一个web3实例,设置一个"provider"

为保证MetaMask设置好的provider不被覆盖掉,在引入web3之前一般要做当前环境检查(以v0.20.1为例):

代码语言:js
复制
if (typeof web3 !== 'undefined') {
	web3 = new Web3(web3.currentProvider);
} else {
	web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}

3 异步回调(callback)

web3js API设计的最初目的,主要是为了和本地RPC节点共同使用,所以默认情况下发送同步HTTP请求。

如发送异步请求,可在函数最后一个参数位,传入一个回调函数。一般采用的回调风格是“错误优先”,如:

代码语言:js
复制
web3.eth.getBlock(48, function(error, result){
    if(!error)
        console.log(JSON.stringify(result));
    else
        console.error(error);
});

回调 Promise 事件(v1.0.0)

为助 web3 集成到不同标准的所有类型项目中,1.0.0版本提供多种方式处理异步函数。大多数web3对象允许将一个回调函数作为最后一个函数参数传入,同时返回一个promise用于链式调用。

以太坊作为一个区块链系统,一次请求具有不同的结束阶段。为满足这样要求,1.0.0 版本将这类函数调用的返回值包成一个“承诺事件”(promiEvent),这是一个 promise 和 EventEmitter 的结合体。

PromiEvent 的用法就像 promise 一样,另外还加入了.on、.once 和.off方法。

代码语言:js
复制
web3.eth.sendTransaction({from: '0x123...', data: '0x432...'})
.once('transactionHash', function(hash){ ... })
.once('receipt', function(receipt){ ... })
.on('confirmation', function(confNumber, receipt){ ... })
.on('error', function(error){ ... })
.then(function(receipt){
// will be fired once the receipt is mined });nm

4 web3.js合约的相关方法

创建合约

创建合约实例的方法,最基本的合约相关方法:

代码语言:js
复制
new web3.eth.Contract(jsonInterface[,address][,options])

Contract接收三个参数:

  • jsonInterface派生自合约的ABI
  • 合约实际地址
  • 一个对象,包含from,gasPrice,gas,data。后两个参数可选。

通过地址初始化合约实例,或者部署一个新的合约:

代码语言:js
复制
web3.eth.contract
var MyContract = web3.eth.contract(abiArray);
// 通过地址初始化合约实例
var contractInstance = MyContract.at(address);
// 或者部署一个新的合约
var contractInstance = MyContract.new([constructorParam1]
[, constructorParam2], {data: '0x12345...', from:
myAccount, gas: 1000000});

监听合约事件

很多时候我们会关注合约执行的重要操作,如转账,在web3.js中我们可以监听对的合约事件,这样当合约事件被触发,web3.js就能感知事件并执行回调函数实现相应的业务逻辑。

事件和日志相关,有时希望检索一些日志数据,这个操作很常见,因为合绑署到区块链上,用户如何和合约交互完全不可控。

用户可通过我们提供的网站来和的交互,这样我们能获取一些交互数据,如交易Hash。

合约的 event 类似于 filter,可以设置过滤选项来监听

代码语言:javascript
复制
// 监听合约事件
var event = myContractInstance.MyEvent({valueA: 23}
[, additionalFilterObject]);

// 监听事件
event.watch(function(error, result) {
    if (!error) {
        console.log(result);
    }
});

// 还可以使用传入回调函数的方法,立刻开始监听事件
var event = myContractInstance.MyEvent({valueA: 23}, additionalFilterObject, function(error, result) {
    if (!error) {
        console.log(result);
    }
});

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 web3.js简介
  • 2 web3模块加载
  • 3 异步回调(callback)
    • 回调 Promise 事件(v1.0.0)
    • 4 web3.js合约的相关方法
      • 创建合约
        • 监听合约事件
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档