我试图通过使用我在下面的代码中使用的消息签名来验证幻影钱包,它返回给我一个签名,我如何在后端验证该签名。
const encodedMessage = new TextEncoder().encode("Message to sign");
const signedMessage = await window.solana.request({
method: "signMessage",
params: {
message: encodedMessage,
display: "utf8", //hex,utf8
},
});
这里签名的消息响应这个带有publickey和签名的答案
{
"publicKey": "Gy4xSKsLHXScRMVZgKt5f6BvDawp1JW8PrenA3GbakCK",
"signature": "5BoNFSoV9WEafBnXon2ujPzH5zgjwZkXHL9vkHuUHEnc1AqLSN38LEx5XtAz68JFEt9RhvuhmPL3GkMPdMcQPuzN"
}
- 在后台生成唯一的消息并将其保存在您的数据库
- 从前端请求
- 通过提供者 签署消息
- 将结果发送到后端
- 从数据库中检索消息
- 根据收到的签名验证
前端h1> 台h1> div class="one_answers">如果您想要验证签名,您还需要签名的数据,并使用底层验证器:
nacl.sign.detached.verify(signData, signature, publicKey.toBuffer())
通常,您可能希望直接验证已签名的事务,而不是通过在Transaction
上使用verifySignatures
方法要求用户对另一条消息进行签名:https://github.com/solana-labs/solana/blob/d4e7ebf4f8821dfa59a1f278898cf9a7ad70ebd9/web3.js/src/transaction.ts#L673