新闻详情

新闻详情

首页 / 资讯中心 / 详情

Solana CLI 实战:使用 solana transfer 发送与接收 SOL 的完整指南

发布时间:2026/9/14 13:09:04来源:尧图网络
Solana CLI 实战:使用 solana transfer 发送与接收 SOL 的完整指南
Solana CLI 实战使用 solana transfer 发送与接收 SOL 的完整指南【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solana本文基于 Solana 官方文档 Send and Receive Tokens 展开系统讲解如何在 Solana CLIsolana 命令行工具上完成 SOL 的接收、发送与转账验证从钱包类型选择、devnet 空投测试到solana transfer命令的完整参数语义并结合 cli/src/wallet.rs 中process_transfer的源码实现与 cli/tests/transfer.rs 的集成测试说明转账在校验、签名、提交各阶段到底发生了什么。读完本文你可以独立完成一次带费用预算的转账操作并能解释--allow-unfunded-recipient、--fee-payer、ALL等关键参数的底层行为。一、前置准备钱包类型与密钥对约定在发送和接收 SOL 之前你需要先创建一个钱包并且能够访问其地址pubkey和签名密钥对keypair。Solana 支持三种命令行钱包形态对应仓库文档纸质钱包paper walletdocs/src/cli/wallets/paper.md文件系统钱包file system walletdocs/src/cli/wallets/file-system.md硬件钱包hardware walletdocs/src/cli/wallets/hardware/index.md不同钱包类型对应的密钥对传入方式有所不同例如文件钱包传 keypair 文件路径、硬件钱包传usb://ledger?key0形式的路径详见 docs/src/cli/intro.md 中的 “Keypair conventions” 一节。二、转账前自测在 devnet 上验证钱包可用性在把公钥分享给他人之前建议先确认密钥对有效、且你确实持有对应私钥。官方文档推荐的做法是创建一个第二个钱包再向它转账以此验证“能发也能收”。测试使用 Solana 开发者测试网devnet上面的代币没有真实价值丢失也无妨。2.1 空投测试代币向自己的地址空投 1 个测试 SOLsolana airdrop 1 RECIPIENT_ACCOUNT_ADDRESS --url https://api.devnet.solana.com其中RECIPIENT_ACCOUNT_ADDRESS替换为你的 base58 编码公钥/钱包地址。命令会返回一笔交易的签名signature。如果余额没有按预期变化可以用solana confirm -v TRANSACTION_SIGNATURE查看交易失败的详细信息-v模式下还会以|srwx|位图展示各账户的角色s已签名、r可读、w可写、x程序账户这一说明直接来自 cli/src/wallet.rs 中confirm子命令的after_help文本。2.2 查询余额确认空投成功余额应输出1 SOLsolana balance ACCOUNT_ADDRESS --url https://api.devnet.solana.combalance子命令还支持--lamports以最小单位 lamports 显示余额定义见 cli/src/wallet.rs。2.3 创建第二个钱包地址创建一个新密钥对并记录其公钥作为收款地址solana-keygen new --no-passphrase --no-outfile输出中pubkey:之后的字符串即为地址例如pubkey: GKvqsuNcnwWqPzzuhLmGi4rzzh55FhJtGizkhHaEJqiV如果你希望第二个钱包与第一个保持同类型可以分别为 paper、file system、hardware 钱包创建多个地址参见上述三个钱包文档中的 “creating multiple addresses” 小节。2.4 从第一个钱包转账给第二个地址Solana 集群只接受用“发送方公钥对应的私钥”签名过的转账交易这一步正好证明你持有 airdrop 代币的私钥solana transfer --from KEYPAIR RECIPIENT_ACCOUNT_ADDRESS 0.5 --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer KEYPAIR其中KEYPAIR是第一个钱包中 keypair 的路径RECIPIENT_ACCOUNT_ADDRESS是第二个钱包的地址。这里显式带上--allow-unfunded-recipient是因为收款地址此时还是“零余额”账户——不加该参数时 CLI 会直接拒绝交易这一行为的源码与测试依据见下文第五节。用solana balance分别查询两个地址确认余额变化。2.5 完整示例从创建钱包到转账成功官方文档给出的端到端示例devnet如下建议逐步复制执行$ solana-keygen new --outfile my_solana_wallet.json # 创建第一个钱包文件系统钱包 Generating a new keypair For added security, enter a passphrase (empty for no passphrase): Wrote new keypair to my_solana_wallet.json pubkey: DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK # 第一个钱包的地址 Save this seed phrase to recover your new keypair: width enhance concert vacant ketchup eternal spy craft spy guard tag punch # 真实钱包切勿在网络上公开这组助记词! $ solana airdrop 1 DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK --url https://api.devnet.solana.com # 向钱包地址空投 1 SOL Requesting airdrop of 1 SOL from 35.233.193.70:9900 1 SOL $ solana balance DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK --url https://api.devnet.solana.com 1 SOL $ solana-keygen new --no-outfile # 创建第二个钱包纸质钱包不落盘 Generating a new keypair For added security, enter a passphrase (empty for no passphrase): pubkey: 7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv # 第二个纸质钱包的地址 Save this seed phrase to recover your new keypair: clump panic cousin hurt coast charge engage fall eager urge win love $ solana transfer --from my_solana_wallet.json 7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv 0.5 --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer my_solana_wallet.json 3gmXvykAd1nCQQ7MjosaHLf69Xyaqyq1qw2eu1mgPyYXd5G4v1rihhg1CiRw35b9fHzcftGKKEu4mbUeXY2pEX2z # 交易签名 $ solana balance DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK --url https://api.devnet.solana.com 0.499995 SOL # 发送方因支付 0.000005 SOL 交易费剩余略少于 0.5 SOL $ solana balance 7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv --url https://api.devnet.solana.com 0.5 SOL # 第二个钱包已收到 0.5 SOL注意最后两行发送方余额是0.499995 SOL而非0.5 SOL差额正是本笔交易的固定费用 0.000005 SOL。这一费用模型在集成测试 cli/tests/transfer.rs 中通过FeeStructure::default().get_max_fee(1, 0)精确复现——get_max_fee(签名数, 加载账户数)是每笔转账扣费的计算依据。三、接收代币地址即公钥接收代币只需要一个可以对外公开的地址。在 Solana 中钱包地址就是密钥对的公钥。密钥对的生成方式取决于你如何存储它paper / file system / hardware创建钱包的完整流程见 docs/src/cli/wallets/index.md。创建完成后你会得到每个密钥对对应的公钥——一段 32 到 44 个字符的 base58 编码字符串。四、发送代币solana transfer 参数详解当你持有 SOL 并想转给他人时需要三样东西你的 keypair 路径、对方的 base58 公钥、转账金额。基础命令为solana transfer --from KEYPAIR RECIPIENT_ACCOUNT_ADDRESS AMOUNT --fee-payer KEYPAIR随后用solana balance ACCOUNT_ADDRESS确认双方余额。下面结合 cli/src/wallet.rs 中transfer子命令的完整参数定义逐条说明其取值与默认值参数位置/长选项说明源码中的帮助文本RECIPIENT_ADDRESS位置参数 1必填收款方账户base58 公钥AMOUNT位置参数 2必填转账数量SOL校验器is_amount_or_all允许整数、浮点数或关键字ALL表示转走全部余额--from FROM_ADDRESS选项资金来源账户默认为 CLI 配置中的 keypairconfig.signers[0]--allow-unfunded-recipient选项收款地址余额为 0 时仍完成转账--no-wait选项提交后立即返回签名不等待确认--fee-payer KEYPAIR选项指定费用支付账户可为 keypair 文件、ASK关键字或离线签名者的 pubkey需配合--signer默认为客户端 keypair见 clap-utils/src/fee_payer.rs--memo STRING选项附加链上备注memo_arg()提供--sign-only等离线参数选项组由offline_args()提供支持离线签名后再提交--nonce-*选项组由nonce_args(false)提供支持使用 nonce 账户的 blockhash 替代实时 blockhash--compute-unit-price选项指定优先级费用micro-lamports per CU关于AMOUNT的取值范围校验函数 is_amount_or_all 只接受能解析为u64/f64的字符串或精确的ALL关键字其余输入会直接报Unable to parse input amount as integer or float。五、源码深读process_transfer 的校验与提交流程solana transfer的执行逻辑集中在 process_transfer其关键步骤与文档行为一一对应收款方资金校验对应--allow-unfunded-recipient在非--sign-only模式下CLI 会先通过rpc_client.get_balance_with_commitment(to, ...)查询收款地址余额若为 0 且未带--allow-unfunded-recipient直接返回错误 “The recipient address (...) is not funded. Add--allow-unfunded-recipientto complete the transfer”cli/src/wallet.rs。这正是文档示例中转账给全新地址时必须加该标志的原因。金额解析与余额检查通过resolve_spend_tx_and_check_account_balancescli/src/spend_utils.rs在本地预演“转账 费用”是否超出发送方余额ALL关键字会在此被换算为“余额 − 费用”的 lamports 数。构建消息并签名普通转账构建system_instruction::transfer(from_pubkey, to, lamports)若使用--derived-address-seed/--derived-address-program-id隐藏参数则改为transfer_with_seed从派生账户出资cli/src/wallet.rs。随后tx.try_sign(config.signers, recent_blockhash)完成签名。提交与确认--no-wait时调用rpc_client.send_transaction立即返回否则调用send_and_confirm_transaction_with_spinner等待确认并用log_instruction_custom_error::SystemError把系统程序层面的错误如InsufficientFundsForRent转成可读诊断cli/src/wallet.rs。六、集成测试印证费用、ALL、离线签名与 noncecli/tests/transfer.rs 是一组基于TestValidator的端到端测试可以直接用来验证文档所述行为test_transfercli/tests/transfer.rs普通转账后断言发送方余额为4.0 SOL - fee_one_sig、收款方恰好1.0 SOL再尝试转出超过余额的 4 SOL断言process_command失败对应费用检查InsufficientFundsForSpendAndFee随后覆盖离线签名sign_only: trueBlockhashQuery::None(blockhash)再二次提交与基于 nonce 账户的转账转账后 nonce hash 已刷新。test_transfer_multisession_signingcli/tests/transfer.rs演示“费用支付者”与“资金来源”分离时的多轮离线签名——先由 fee payer 离线签第一版消息再由--from账户签第二版最后提交集群费用从 fee payer 账户扣除而非from账户这正是文档中--fee-payer独立于--from的语义。test_transfer_allcli/tests/transfer.rsSpendAmount::All转账后断言发送方余额归 0、收款方得到500_000 lamports - fee。test_transfer_unfunded_recipientcli/tests/transfer.rs向零余额收款地址转账且不设allow_unfunded_recipient断言命令失败——与源码中的前置校验第五节第 1 步互相印证。test_transfer_with_seedcli/tests/transfer.rs验证derived_address_seed路径下从派生账户出资、派生账户余额归 0。七、常见排障清单余额没到账先用solana confirm -v TRANSACTION_SIGNATURE查看失败原因-v模式对已确认交易会输出指令级错误与账户模式位图。提示收款地址未注资追加--allow-unfunded-recipient或使用文档示例中的完整命令形态。发送方余额扣得比转账额多一点这是正常的固定交易费0.000005 SOL/签名见 cli/tests/transfer.rs 的get_max_fee(1, 0)若同时使用了--fee-payer指向其他账户费用将从该账户扣除。想一次性转空余额AMOUNT位置直接传ALLCLI 会自动扣除对应费用后转账。离线/多签名场景用--sign-only生成本地签名把产物交给其他签名者继续签最后由任一在线节点提交可参考 clap-utils/src/offline.rs 中的离线参数定义与test_transfer_multisession_signing的用法。以上所有命令以当前仓库中 CLI 的实现为准适用前提是本仓库对应版本编译出的solana与solana-keygen可执行程序devnet 空投可用性受网络与 faucet 状态影响仅用于开发测试。【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solana创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

国产AI软件实操体检:中文办公场景下的语义理解与多模态落地 2026/9/14 13:51:12

国产AI软件实操体检:中文办公场景下的语义理解与多模态落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
C/S架构医院管理系统源码拆解:从三层架构到SQL Server事务与权限设计 2026/9/14 13:51:12

C/S架构医院管理系统源码拆解:从三层架构到SQL Server事务与权限设计

简介:这是一套基于C#与.NET平台、采用客户端/服务器(CS)架构的医院管理系统完整源码,适合C#中高级学习者、医疗信息化开发者及毕业设计参考。系统覆盖挂号、门诊、住院、药房、财务等典型业务模块,代码中包含ADO.NET数…

阅读更多 →
SpringBoot与微信小程序开发校园维修报修系统 2026/9/14 13:51:12

SpringBoot与微信小程序开发校园维修报修系统

1. 项目背景与核心需求 校园维修报修管理系统是高校后勤管理中的重要数字化工具。传统报修方式存在电话占线、纸质工单易丢失、维修进度不透明等问题。我们团队基于SpringBoot和微信小程序开发的这套系统,实现了报修流程的全程电子化跟踪。 微信小程序作为前端载体…

阅读更多 →
Qt5.14.2 aarch64静态交叉编译完整手册与踩坑实录 2026/9/14 13:51:12

Qt5.14.2 aarch64静态交叉编译完整手册与踩坑实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GenericAgent框架:3K代码构建自进化AI助手 2026/9/14 13:51:12

GenericAgent框架:3K代码构建自进化AI助手

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows 多核机器上 LightGBM CPU 利用率只有 10% 左右怎么排查 2026/9/14 13:48:10

Windows 多核机器上 LightGBM CPU 利用率只有 10% 左右怎么排查

Windows 多核机器上 LightGBM CPU 利用率只有 10% 左右怎么排查 【免费下载链接】LightGBM A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and ma…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞