问题描述
我正在使用 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