一些安全模型要求将签名密钥(因此签名过程)与交易创建和网络广播分开保存。示例包括:在多重签名方案中收集来自不同地理位置的签名者的签名使用隔离签名设备签署交易本文档介绍了如何使用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
要离线签署交易,请在命令行上传递以下参数
--sign-only
,阻止客户端将签名的交易提交到网络。相反,公钥/签名对将打印到标准输出。--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"]}'
要将已离线签名的交易提交到网络,请在命令行上传递以下参数
--blockhash BASE58_HASH
,必须与用于签名的区块哈希相同--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-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!