用JavaScript查询Validator余额【以太坊2.0】

简介: 在ETH 2.0抵押的一个基本需求是监视其验证者余额,在这个教程中我们将学习如何利用Infura的ETH 2.0 Beacon Chain API编写程序来查询验证者(Validator)的余额。

在ETH 2.0抵押的一个基本需求是监视其验证者余额,在这个教程中我们将学习如何利用Infura的ETH 2.0 Beacon Chain API编写程序来查询验证者(Validator)的余额。

用自己熟悉的语言学习 以太坊DApp开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

离ETH 2.0的零阶段启动越来越近,在witti以及即将上线的altona测试网上参与抵押的兴趣也越来越高涨 —— 调查报告显示超过65%的受访者表示期望抵押其持有的ETH。

首先我们需要引入axio库并创建一个HTTP客户端,从环境变量加载Infura项目ID:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://witti.infura.io/',
  auth: {
    username: process.env.INFURA_PROJECT_ID,
    password: '',
  },
});

我们需要定义一些网络相关的参数。前两个有助于我们计算当前周期(epoch),最后一个用来将余额单位从gwei转换为我们更熟悉的eth:

const SECONDS_PER_SLOT = 12;
const SLOTS_PER_EPOCH = 32;
const GWEI_PER_ETH = 1000000000;

接下来我们将查询网络的创世数据用来计算当前周期:

(async () => {
  let response = await instance.get('node/genesis_time')
  const genesisTime = response.data;

  const now = Math.floor(Date.now() / 1000)
  const currentEpoch = Math.floor((now - genesisTime) / (SECONDS_PER_SLOT * SLOTS_PER_EPOCH))

有了这些代码,我们就可以查询验证者(Validator)的当前余额了,这里我们使用写文章时余额最高的验证者的公钥进行查询:

  response = await instance.post('beacon/validators', {
    epoch: currentEpoch.toString(),
    pubkeys: ["0xb0bfa93603f81ecaf3c450b793e71f7372822cd2002534364493e4e497fb5df16d252ae2fdc6bbc0e74d849f918db393"],
  });

  const balanceGwei = response.data[0].balance;
  const balance = balanceGwei / GWEI_PER_ETH;
  
  console.log(`You have ${balance} Ξ2.0`);
})();

当我们运行这个程序时,就可以看到如下输出:

You have 32.500178823 Ξ2.0

下面是查询ETH 2.0验证者余额的完整代码:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'https://witti.infura.io/',
  auth: {
    username: process.env.INFURA_PROJECT_ID,
    password: '',
  },
});

const SECONDS_PER_SLOT = 12;
const SLOTS_PER_EPOCH = 32;
const GWEI_PER_ETH = 1000000000;

(async () => {
  let response = await instance.get('node/genesis_time')
  const genesisTime = response.data;

  const now = Math.floor(Date.now() / 1000)
  const currentEpoch = Math.floor((now - genesisTime) / (SECONDS_PER_SLOT * SLOTS_PER_EPOCH))

  response = await instance.post('beacon/validators', {
    epoch: currentEpoch.toString(),
    pubkeys: ["0xb0bfa93603f81ecaf3c450b793e71f7372822cd2002534364493e4e497fb5df16d252ae2fdc6bbc0e74d849f918db393"],
  });

  const balanceGwei = response.data[0].balance;
  const balance = balanceGwei / GWEI_PER_ETH;
  
  console.log(`You have ${balance} Ξ2.0`);
})();
目录
相关文章
|
JavaScript 前端开发 数据安全/隐私保护
Javascript知识【validation插件重写表单注册校验】
Javascript知识【validation插件重写表单注册校验】
|
4月前
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
117 0
|
7月前
|
JavaScript 前端开发 区块链
JavaScript【代码】使用JS实现简单的区块链(签名+工作量证明机制)
JavaScript【代码】使用JS实现简单的区块链(签名+工作量证明机制)
74 0
|
JavaScript 前端开发
javascript 验证是否是手机号并封装
javascript 验证是否是手机号并封装
64 0
|
前端开发 JavaScript 程序员
【前端】使用jQuery探索正则表达时,金额验证、纯数字验证等
本篇文章将探索正则表达式的功能 在前端,输入金额时,需要对输入值进行验证,只能出现金额和小数点,或者有些值需要保留2位小数点时,那么通过正则表达式验证就非常的方便和高效
112 0
|
JavaScript
改造jquery validator ,支持多个name相同的验证
改造jquery validator ,支持多个name相同的验证
157 0
|
JavaScript 前端开发
|
存储 JavaScript 前端开发
如何处理JavaScript 中的货币值?
然而,关于如何以编程处理货币价值尚无共识。虽然金钱是现代社会中普遍存在的概念,但相较于日期和时间之类的东西,它并不是任何主流语言中的一流数据类型。结果,每一种软件都有自己的处理方式,且伴随着陷阱
1961 0