我正在使用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和使用子扫描的UI在子扫描上找到。
示例:我刚刚在西区发送了一笔新交易。我得到了散列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",
"display": "",
"judgements": null,
"account_index": "",
"identity": false,
"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