Polkadot:使用 JS API 和 Westend 链的奇怪交易哈希

问题描述

我正在使用 polkadot JS API 在 Westend 上发送交易。 为此,代码片段是这样的:

const hash = await api.tx.balances
      .transfer(to,amount)
      .signAndSend(from,{ tip,nonce: -1 })
      .catch(e => {
        throw e;
      });

我得到了一个很好的哈希值,并且余额正在按预期更新。但是我在 Subscan 上找不到我得到的哈希值。当我获取账户的交易历史时,我在那里看到了一个不同的哈希值,而不是我通过执行上述函数得到的哈希值。我从直接查询 Subscan(在 https://westend.subscan.io/api/scan/transfers 处)获得的哈希值是正确的。它可以通过 API 和使用 Subscan 的 UI 在 Subscan 上找到。

示例: 我刚刚在 Westend 发送了一笔新交易。我得到了哈希 0xdc2605ef0f21c77aa09f4e2df762a729bb2ecb5bb5602fe7a0858be2515c085c;

如果我在 Subscan 上搜索那个哈希,它就不存在。

现在,我获取了该帐户的交易历史记录,并发现我的最后一笔交易是这一笔:

{
  "from": "5Ec2BnQhmoM7anBrXi2wvgPKBUrTDS1ELmcR3j68cgXZxCuo","to": "5HeRXojbvrsgk3x37haUJgxZhFZy8hvsBo9zDGsEsU8XhRRh","extrinsic_index": "6089109-2","success": true,"hash": "0xf026f07bf8736e7b9a664d08529ef88466f5d52a7237d202560cad680865c5a5","block_num": 6089109,"block_timestamp": 1623872502,"module": "balances","amount": "0.000000010014","fee": "15700001585","nonce": 20,"asset_symbol": "","from_account_display": {
    "address": "5Ec2BnQhmoM7anBrXi2wvgPKBUrTDS1ELmcR3j68cgXZxCuo","display": "","judgements": null,"account_index": "","identity": false,"parent": null
  },"to_account_display": {
    "address": "5HeRXojbvrsgk3x37haUJgxZhFZy8hvsBo9zDGsEsU8XhRRh","parent": null
  }
}

我们在那里看到的哈希 (0xf026f07bf8736e7b9a664d08529ef88466f5d52a7237d202560cad680865c5a5) 是正确的。之前的哈希(0xdc2605ef0f21c77aa09f4e2df762a729bb2ecb5bb5602fe7a0858be2515c085c)甚至没有被引用,我不知道它是什么,也不知道函数 signAndSend 返回它的原因。我试图获取给定 tx 有多少确认,但我不能,因为我在进行交易时获得的哈希值(显然)是无用的 - 我正在我的数据库中存储我的哈希值进行交易时获取

有人可以在这里解释一下吗?

谢谢!

解决方法

找到了!

变量 hash 不是十六进制格式 - 好吧,它实际上是,但不是系统想要的方式。我不明白为什么,但事实是您必须执行 hash.toHex() 才能获得正确的值。所以,解决方案是这样的:

const hash = await api.tx.balances
      .transfer(to,amount)
      .signAndSend(from,{ tip,nonce: -1 })
      .catch(e => {
        throw e;
      });

return hash.toHex();

文档里有,我没注意:https://polkadot.js.org/docs/api/examples/promise/make-transfer