使用 Solana CLI 进行离线交易签名

  • 想样
  • 发布于 3天前
  • 阅读 146

一些安全模型要求将签名密钥(因此签名过程)与交易创建和网络广播分开保存。示例包括:在多重签名方案中收集来自不同地理位置的签名者的签名使用隔离签名设备签署交易本文档介绍了如何使用Solana的CLI单独签署和提交交易。

<!--StartFragment-->

一些安全模型要求将签名密钥(因此签名过程)与交易创建和网络广播分开保存。示例包括:

  • 在多重签名方案中收集来自不同地理位置的签名者的签名
  • 使用隔离签名设备签署交易

本文档介绍了如何使用 Solana 的 CLI 单独签署和提交交易。

支持离线签名

目前支持离线签名的命令如下:

  • create-stake-account
  • create-stake-account-checked
  • deactivate-stake
  • delegate-stake
  • split-stake
  • stake-authorize
  • stake-authorize-checked
  • stake-set-lockup
  • stake-set-lockup-checked
  • transfer
  • withdraw-stake
  • create-vote-account
  • vote-authorize-voter
  • vote-authorize-voter-checked
  • vote-authorize-withdrawer
  • vote-authorize-withdrawer-checked
  • vote-update-commission
  • vote-update-validator
  • withdraw-from-vote-account

离线签署交易

要离线签署交易,请在命令行上传递以下参数

  1. --sign-only,阻止客户端将签名的交易提交到网络。相反,公钥/签名对将打印到标准输出。
  2. --blockhash BASE58_HASH,允许调用者指定用于填充交易recent_blockhash字段的值。这有多种用途,即: 无需连接到网络并通过 RPC 查询最近的区块哈希; 使签名者能够在多重签名方案中协调区块哈希

示例:离线签署付款

命令

solana@offline$ solana transfer --sign-only --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \
    recipient-keypair.json 1

输出


Blockhash: 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF
Signers (Pubkey=Signature):
  FhtzLVsmcV7S5XqGD79ErgoseCLhZYmEZnz9kQg1Rp7j=4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN

{"blockhash":"5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF","signers":["FhtzLVsmcV7S5XqGD79ErgoseCLhZYmEZnz9kQg1Rp7j=4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN"]}'

向网络

要将已离线签名的交易提交到网络,请在命令行上传递以下参数

  1. --blockhash BASE58_HASH,必须与用于签名的区块哈希相同
  2. --signer BASE58_PUBKEY=BASE58_SIGNATURE,每个离线签名者一个。这包括直接在交易中包含公钥/签名对,而不是使用任何本地密钥对进行签名

示例:提交离线签名的付款

命令

solana@online$ solana transfer --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \
    --signer FhtzLVsmcV7S5XqGD79ErgoseCLhZYmEZnz9kQg1Rp7j=4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN
    recipient-keypair.json 1

输出

4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN

多个会话

离线签名也可以在多个会话中进行。在这种情况下,为每个角色传递缺席签名者的公钥。所有指定但未生成签名的公钥将在离线签名输出中列为缺席

示例:通过两次线下签名会议

命令(离线会话)

solana@offline1$ solana transfer Fdri24WUGtrCXZ55nXiewAj6RM18hRHPGAjZk3o6vBut 10 \
    --blockhash 7ALDjLv56a8f6sH6upAZALQKkXyjAwwENH9GomyM8Dbc \
    --sign-only \
    --keypair fee_payer.json \
    --from 674RgFMgdqdRoVtMqSBg7mHFbrrNm1h1r721H1ZMquHL

输出(离线会话)

Blockhash: 7ALDjLv56a8f6sH6upAZALQKkXyjAwwENH9GomyM8Dbc
Signers (Pubkey=Signature):
  3bo5YiRagwmRikuH6H1d2gkKef5nFZXE3gJeoHxJbPjy=ohGKvpRC46jAduwU9NW8tP91JkCT5r8Mo67Ysnid4zc76tiiV1Ho6jv3BKFSbBcr2NcPPCarmfTLSkTHsJCtdYi
Absent Signers (Pubkey):
  674RgFMgdqdRoVtMqSBg7mHFbrrNm1h1r721H1ZMquHL

命令(离线会话 )

solana@offline2$ solana transfer Fdri24WUGtrCXZ55nXiewAj6RM18hRHPGAjZk3o6vBut 10 \
    --blockhash 7ALDjLv56a8f6sH6upAZALQKkXyjAwwENH9GomyM8Dbc \
    --sign-only \
    --keypair from.json \
    --fee-payer 3bo5YiRagwmRikuH6H1d2gkKef5nFZXE3gJeoHxJbPjy

输出(离线会话)

Blockhash: 7ALDjLv56a8f6sH6upAZALQKkXyjAwwENH9GomyM8Dbc
Signers (Pubkey=Signature):
  674RgFMgdqdRoVtMqSBg7mHFbrrNm1h1r721H1ZMquHL=3vJtnba4dKQmEAieAekC1rJnPUndBcpvqRPRMoPWqhLEMCty2SdUxt2yvC1wQW6wVUa5putZMt6kdwCaTv8gk7sQ
Absent Signers (Pubkey):
  3bo5YiRagwmRikuH6H1d2gkKef5nFZXE3gJeoHxJbPjy

命令(网上提交)

solana@online$ solana transfer Fdri24WUGtrCXZ55nXiewAj6RM18hRHPGAjZk3o6vBut 10 \
    --blockhash 7ALDjLv56a8f6sH6upAZALQKkXyjAwwENH9GomyM8Dbc \
    --from 674RgFMgdqdRoVtMqSBg7mHFbrrNm1h1r721H1ZMquHL \
    --signer 674RgFMgdqdRoVtMqSBg7mHFbrrNm1h1r721H1ZMquHL=3vJtnba4dKQmEAieAekC1rJnPUndBcpvqRPRMoPWqhLEMCty2SdUxt2yvC1wQW6wVUa5putZMt6kdwCaTv8gk7sQ \
    --fee-payer 3bo5YiRagwmRikuH6H1d2gkKef5nFZXE3gJeoHxJbPjy \
    --signer 3bo5YiRagwmRikuH6H1d2gkKef5nFZXE3gJeoHxJbPjy=ohGKvpRC46jAduwU9NW8tP91JkCT5r8Mo67Ysnid4zc76tiiV1Ho6jv3BKFSbBcr2NcPPCarmfTLSkTHsJCtdYi

成果(网上提交)

ohGKvpRC46jAduwU9NW8tP91JkCT5r8Mo67Ysnid4zc76tiiV1Ho6jv3BKFSbBcr2NcPPCarmfTLSkTHsJCtdYi

争取更多时间签署

通常,Solana 交易必须在其字段中的区块哈希的一定时间段内由网络签名并接受recent_blockhash(撰写本文时约为 1 分钟)。如果您的签名过程花费的时间比这更长, 持久交易 Nonce可以为您提供所需的额外时间。

<!--EndFragment-->

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
想样
想样
江湖只有他的大名,没有他的介绍。