通过帐户获得验证器的奖励积分

  • 本文关键字:验证 polkadot polkadot-js
  • 更新时间 :
  • 英文 :


我正试图找到属于验证器的奖励积分。我从这个开始:

const activeEra = await api.query.staking.activeEra()
const rewardPoints = await api.query.staking.erasRewardPoints(activeEra.unwrap().index)
const individualRewardPoints = activeEraRewardPoints.individual

现在,看起来individualRewardPoints是某种由验证器帐户键入的映射,但我找不到如何获取特定项(我不想迭代映射(。有了一个字符串,我尝试了这些:

const alice = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY'
individualRewardPoints.get(alice)
individualRewardPoints.get(Buffer.from(alice))

这看起来很有希望,但仍然不起作用:

{ decodeAddress } = require ('@polkadot/keyring')
individualRewardPoints.get(decodeAddress(alice))

它们都返回CCD_ 2。如何获得验证器的奖励积分?

我遇到了同样的挑战,不幸的是,我没有找到迭代的方法。

eraRewardPoints.individualBTreeMap<AccountId, RewardPoint>,所以密钥应该是AccountId。在后台,这个BTreeMap由JS Map表示,在TS中,我们看到它的密钥类型是AccountId。要创建该类型,我们可以执行api.createType('AccountId', alice)。然而,对我来说,创建类型并使用它来键入是不起作用的。我的猜测是,它创建了一个JS无法识别为与映射中相同的AccountId对象的新对象。

所以我的解决方案是:

for (const [id, points] of eraRewardPoints.individual.entries()) {
if (id.toString() === validatorId) {
return points;
}
}

你可以在substrate api sidecar中找到确切的代码,它有一个端点(accounts/{accountId}/staking-payouts(,可以使用Rust中的算法为地址支付费用:https://github.com/paritytech/substrate-api-sidecar/blob/ee0a0488bf8100a42e713fc287f08d72394677b9/src/services/accounts/AccountsStakingPayoutsService.ts#L301

相关内容

  • 没有找到相关文章

最新更新