链下消息签名是一种使用Solana钱包签署非交易消息的方法。此功能可用于验证用户身份或提供钱包所有权证明。签署链下消息要签署任意链下消息,请运行以下命令:solanasign-offchain-message<MESSAGE>该消息将使用CLI的默认私钥进行编码和签名,并将签
<!--StartFragment-->
链下消息签名是一种使用 Solana 钱包签署非交易消息的方法。此功能可用于验证用户身份或提供钱包所有权证明。
要签署任意链下消息,请运行以下命令:
solana sign-offchain-message <MESSAGE>
该消息将使用 CLI 的默认私钥进行编码和签名,并将签名打印到输出中。如果您想使用另一个密钥对其进行签名,只需使用以下-k/--keypair
选项:
solana sign-offchain-message -k <KEYPAIR> <MESSAGE>
默认情况下,构建的消息是版本 0,这是当前唯一支持的版本。当其他版本可用时,您可以使用以下--version
选项覆盖默认值:
solana sign-offchain-message -k <KEYPAIR> --version <VERSION> <MESSAGE>
消息格式根据消息的版本和文本自动确定。
版本0
标头指定了三种消息格式,允许在兼容性和消息组成之间进行权衡:
ID | 编码 | 最大长度 | 硬件钱包支持 |
---|---|---|---|
0 | 受限 ASCII * | 1212 | 是的 |
1 | UTF-8 | 1212 | 仅盲签 |
2 | UTF-8 | 65515 | 不 |
*那些返回 true 的字符isprint(3)
。即,0x20..=0x7e
。
格式0
和1
受到硬件钱包支持的推动,其中存储有效负载的 RAM 和字体字符支持都受到限制。
要使用 Ledger 签署链下消息,请确保您的 Ledger 运行的是最新固件和 Solana Ledger App 版本 1.3.0 或更高版本。解锁 Ledger 并打开 Solana Ledger App 后,运行:
solana sign-offchain-message -k usb://ledger <MESSAGE>
请注意,UTF-8 编码消息需要Allow blind sign
在 Solana Ledger App 中启用选项。此外,由于 Ledger 设备缺乏 UTF-8 支持,因此在这种情况下只会显示消息的哈希值。
如果Display mode
设置为Expert
,Ledger 将显示有关要签名的消息的技术信息。
要验证链下消息签名,请运行以下命令:
solana verify-offchain-signature <MESSAGE> <SIGNATURE>
将使用默认 CLI 签名者的公钥。您可以使用以下--signer
选项指定另一个密钥:
solana verify-offchain-signature --signer <PUBKEY> <MESSAGE> <SIGNATURE>
如果签名消息的版本与默认版本不同,则需要明确指定匹配的版本:
solana verify-offchain-signature --version <VERSION> <MESSAGE> <SIGNATURE>
为了确保链下消息不是有效交易,它们使用固定前缀进行编码:\xffsolana offchain
,其中第一个字节的选择使得它作为 MessageHeader
当前交易中的第一个字节是隐含非法的。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!