当前位置: 主页 > JAVA语言

java shh回调模式-java中回调的作用

发布时间:2023-02-09 14:38   浏览次数:次   作者:佚名

web3.js简介

Web3 是一组用于与以太坊节点通信的 API。 如果我们需要开发基于以太坊的去中心化应用,我们可能需要使用web3(或者使用ethers.js)java shh回调模式,比如我们需要使用Web3来获取节点状态和账号信息,调用合约java shh回调模式,监听合约事件, ETC。

译者注:智能合约运行在节点提供的虚拟机上,因此调用智能合约也需要向节点发送请求

web3.js是Web3协议的JavaScript实现版本,其他多种语言的实现包括

注意web3.js有两个不兼容的版本:0.20.x和1.0beta,1.0重构0.20版本。

本文档是web3.js 0.20.x版本的翻译,对应的官方文档地址在这里。 如果你使用的是web3.js 1.0版本,对应的官方文档地址在Web3js Readthedocs。

开发基于以太坊的DApp(去中心化应用),可以使用web3.js库提供的web3对象。 在底层实现中,web3通过RPC调用与本地节点通信,web3.js可以与任何暴露RPC接口的以太坊通信。 方节点连接。

web3 包含以下对象:

使用 web3.js 的示例:

想学习去中心化应用(DAPP)开发,这门课程不容错过区块链全栈-以太坊DAPP开发实战

介绍web3

首先需要通过以下方式在应用项目中引入web3:

然后你需要创建一个 web3 的实例并设置一个提供者。 为了保证不会覆盖已有的provider(Mist浏览器或者安装了MetaMak的浏览器都会提供Provider),需要检查web3实例是否已经存在,示例代码如下:

if (typeof web3 !== 'undefined') {
  web3 = new Web3(web3.currentProvider);
} else {
  // set the provider you want from Web3.providers
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}

译者注:官方文档中没有针对web3的update,现在新的检查方式是:

// 检查是否是新的MetaMask  DApp浏览器
var web3Provider;
if (window.ethereum) {
   web3Provider = window.ethereum;
  try {
    // 请求用户授权
    await window.ethereum.enable();
  } catch (error) {
    // 用户不授权时
    console.error("User denied account access")
  }
} else if (window.web3) {   // 老版 MetaMask Legacy dapp browsers...
  web3Provider = window.web3.currentProvider;
} else {
  web3Provider = new Web3.providers.HttpProvider('http://localhost:8545');
}
web3 = new Web3(web3Provider);

成功导入后,您现在可以使用 web3 对象的 API。

使用回调

由于此 API 旨在与本地 RPC 节点进行交互,因此默认情况下所有功能都使用同步 HTTP 请求。

如果你想发出一个异步请求。 大多数函数允许在参数列表后面传递一个可选的回调函数以支持异步,并且回调函数支持错误优先的回调风格。

web3.eth.getBlock(48, function(error, result){
    if(!error)
        console.log(JSON.stringify(result));
    else
        console.error(error);
})

批量请求

允许多个请求同时排队和执行是可能的。

注意:批处理请求不会更快,在某些情况下,同时发出多个异步请求可能会更快。 这里批量请求的主要目的是为了保证请求的串行执行。

var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
batch.execute();

web3.js中的大数处理

如果是一个数据类型的返回结果,通常会得到一个BigNumber对象,因为Javascript不能正确处理BigNumber,看下面的例子:

"101010100324325345346456456456456456456"
// "101010100324325345346456456456456456456"
101010100324325345346456456456456456456
// 1.0101010032432535e+38

所以 web3.js 依赖于 BigNumber Library >_。

var balance = new BigNumber('131242344353464564564574574567456');
// or var balance = web3.eth.getBalance(someAddress);
balance.plus(21).toString(10); // 转化为字符串
// "131242344353464564564574574567477"

在下一个例子中,我们将看到,如果浮点数超过 20 个,仍然会出错。 因此,建议尽量使用wei作为账户余额的单位,只有在需要向用户展示时才转换成其他单位。

var balance = new BigNumber('13124.234435346456466666457455567456');
balance.plus(21).toString(10); // toString(10) converts it to a number string, but can only show upto 20 digits
// "13145.23443534645646666646" // your number will be truncated after the 20th digit

Web3.js 0.2xx API 手册

指数和表格