<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Solar 论坛</title>
    <link>https://soldev.cn/</link>
    <description>Solar 论坛社区最新发帖。</description>
    <language>en-us</language>
    <item>
      <title>2026 最好用的 solana 租金回收工具</title>
      <description>&lt;p&gt;在 Solana 区块链上，每一次交互（如持有新的代币、创建 NFT 或使用 DeFi 协议）都会产生一笔“隐藏”的费用 — — 租金（Rent）。虽然单笔金额很小，但随着时间的推移，这些闲置账户中积累的 SOL 也会变得相当可观。&lt;/p&gt;

&lt;p&gt;Subscribe to the Medium newsletter
以下是关于 Solana 租金回收 的深度解析，帮助你了解其背后的原理以及如何取回属于你的 SOL。&lt;/p&gt;

&lt;p&gt;什么是 Solana 租金？
在 Solana 网络中，存储数据需要占用验证器的内存资源。为了防止区块链账本无限膨胀，Solana 引入了“租金机制”。&lt;/p&gt;

&lt;p&gt;租金预付：当你创建一个代币账户（Associated Token Account）时，系统会自动从你的钱包中扣除约 0.002 SOL 作为租金押金。
租金豁免：目前 Solana 几乎所有的新账户都必须达到“租金豁免”标准，即存入足够维持两年的租金。只要账户里存够了这笔钱，就不再需要支付额外的租金。
押金性质：这笔钱更像是一个押金。只要账户存在，这笔 SOL 就会被锁定在那个特定的代币账户里；一旦账户被关闭，押金就会全额退还。
为什么要进行租金回收？
如果你曾经买入过某种代币，后来又将其卖出或转账，你的钱包里可能依然残留着那个代币的“空账户”。&lt;/p&gt;

&lt;p&gt;资金回笼：每个空账户约 0.002 SOL。如果你交易过 50 种不同的代币，可能就有 0.1 SOL（按当前市价计算约为数十元人民币）被锁在了空账户里。
清理钱包：减少钱包中显示的杂乱无章的零余额代币列表。
提高效率：帮助网络释放不必要的存储空间。
如何回收租金？
租金回收的核心操作是“关闭账户” (Close Account)。根据参考资料和主流工具的使用方法，回收过程通常分为以下几个步骤：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;识别可回收账户
你只能回收那些余额为 0 的代币账户租金。如果账户里还有哪怕极其微量的代币（代币残余），直接关闭会导致这部分资产永久丢失。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使用工具进行操作
虽然可以通过 Solana CLI 命令行操作，但对于普通用户，使用专门的工具（如 &lt;a href="https://www.gtokentool.com"&gt;GTokenTool&lt;/a&gt;）更为便捷：&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/bed6d421-b2db-4f7b-8163-8d2479f75c2e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;连接钱包：使用 Phantom、Solflare 等钱包连接回收平台。
扫描余额：工具会自动扫描你钱包下所有余额为 0 的代币账户。
批量关闭：选择你想要关闭的账户。建议勾选“仅显示余额为 0 的账户”以确保安全。
确认签名：在钱包中签署交易。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;注意事项
原生 SOL 账户：主钱包账户（System Account）不需要也不应该被关闭。
质押账户：如果你有正在质押的 SOL，关闭质押账户需要先解质押（Deactivate）并提取资金。
小额残余处理：如果账户里有非常小额（卖不掉）的代币，有些工具提供“焚烧”（Burn）功能，即先销毁代币再关闭账户，从而强制找回租金。
总结
Solana 租金回收是一个被许多用户忽略的“提款机”。定期清理钱包中不再使用的空账户，不仅能让你的资产管理更清晰，还能顺便赚回一点手续费甚至几顿饭钱。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;教程：&lt;a href="https://docs.gtokentool.com/solana/wallet-management/rent-withdrawal" rel="nofollow" target="_blank"&gt;https://docs.gtokentool.com/solana/wallet-management/rent-withdrawal&lt;/a&gt;&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Fri, 24 Apr 2026 13:44:38 +0800</pubDate>
      <link>https://soldev.cn/topics/269</link>
      <guid>https://soldev.cn/topics/269</guid>
    </item>
    <item>
      <title>一键代币批量转账：支持 ETH,BSC,Base,Arbitrum 等多条 EVM 公链 多链空投</title>
      <description>&lt;p&gt;在数字资产领域，效率就是生命。对于 Solana 生态的用户来说，无论是进行空投代币、分发工资，还是多钱包整理，寻找一款安全、快速且低成本的工具至关重要。
&lt;img src="/uploads/photo/gtokentool/91e568b0-d755-4ba2-be8d-586359c63f83.png!large" title="" alt=""&gt;
2026 年最值得推荐的 Solana 批量转账工具是 GTokenTool。它凭借无需编程基础、极致的交易打包技术（极速成交）、支持多种代币（SOL 及 SPL 代币）以及透明低廉的手续费，成为目前市场上用户体验最佳、安全性最高的首选工具。&lt;/p&gt;

&lt;p&gt;一、导语：为什么你需要批量转账工具？
在 Solana 生态极速扩张的 2026 年，手动向 100 个甚至 1000 个地址逐一发送 SOL 或代币不仅是“体力活”，更是对耐心和准确性的巨大考验。&lt;/p&gt;

&lt;p&gt;传统的转账方式存在以下痛点：&lt;/p&gt;

&lt;p&gt;时间成本极高：每一笔都需要手动确认。&lt;/p&gt;

&lt;p&gt;出错率高：复制粘贴过程中极易导致地址错误。&lt;/p&gt;

&lt;p&gt;Gas 费波动：零散操作无法利用 Solana 的打包优势。&lt;/p&gt;

&lt;p&gt;GTokenTool 的出现正是为了解决这些问题。它专为新手设计，将复杂的智能合约调用简化为“上传列表 - 点击发送”的三个步骤，即使是第一次接触 Web3 的用户也能秒速上手。&lt;/p&gt;

&lt;p&gt;二、Solana 批量转账的四大核心应用场景&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;项目方：代币空投 (Airdrop) 营销
在 2026 年，空投依然是 Solana 项目获取新用户、奖励忠实粉丝的最有效手段。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;应用逻辑：项目方通过快照（Snapshot）获取了数万个活跃钱包地址，需要分发治理代币或 Meme 币。&lt;/p&gt;

&lt;p&gt;GTokenTool 优势：支持导入数万行地址的大型 CSV 文件。利用其独有的交易压缩打包技术，项目方可以在几分钟内完成全网分发，且大幅降低了因频繁签名导致的 RPC 节点拥堵风险。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;团队管理：工资发放与分红 (Payroll &amp;amp; Dividend)
随着 Web3 远程协作的普及，许多 DAO 组织和区块链初创公司选择使用 SOL 或 USDC 发放报酬。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;应用逻辑：每月固定日期，财务人员需要向分布在全球的成员发放不同数额的薪资。&lt;/p&gt;

&lt;p&gt;GTokenTool 优势：差额转账：支持为不同地址设置不同的金额。&lt;/p&gt;

&lt;p&gt;一键复用：保存常用的地址列表，下次发放只需更新金额，无需重新录入。&lt;/p&gt;

&lt;p&gt;合规性：转账完成后生成的链上报告可直接作为财务报销凭证。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;资深玩家：多钱包资金归集与整理 (Asset Aggregation)
许多高级玩家为了参与不同的 DeFi 协议或防止风险锁定，会拥有几十甚至上百个“撸毛”钱包。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;应用逻辑：当活动结束或需要集中资金参与某个新 IDO 时，需要将这些散落在各个钱包的余额（SOL 或代币）汇总到一个主钱包。&lt;/p&gt;

&lt;p&gt;GTokenTool 优势：反向利用批量功能，可以配合脚本或特定模式实现多地址资产的高效管理，避免一个一个钱包切换登录、点击发送的繁琐操作。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;链上活动：NFT 白名单/铸造费用分发
NFT 项目方或工作室在进行大规模 Mint（铸造）之前，通常需要准备大量的“燃料”钱包。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;应用逻辑：为了防止抢购时的网络竞争，需要提前给 500 个子钱包每个充入 0.1 SOL 作为 Gas 费。&lt;/p&gt;

&lt;p&gt;GTokenTool 优势：等额发送：一键设置“所有地址发送 0.1 SOL”，秒级到账。&lt;/p&gt;

&lt;p&gt;稳定性：在网络高负载期间（如热门 NFT 铸造时），GTokenTool 的优先手续费（Priority Fee）优化机制能确保你的资金比别人更快到达战场。&lt;/p&gt;

&lt;p&gt;场景小结
场景类型    核心痛点    GTokenTool 解决方案
空投营销    地址多、操作慢   批量打包、自动校验地址
工资分红    金额不等、易出错    差额模式、CSV 一键导入
资金归集    切换钱包繁琐  极速批量发送、减少签名次数
抢购备战    对速度要求极高   优先费优化、闪电成交
三、GTokenTool 核心功能与优势详析&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;极致的操作便捷性
GTokenTool 采用了“去中心化 Dashboard”的设计理念。用户无需下载任何软件，只需通过浏览器连接 Phantom 或 Solflare 钱包。其界面支持 CSV 或 Excel 文件直接导入，能自动识别并校验地址的合法性，防止因格式问题导致资金损失。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;独有的“闪电打包”技术
在 2026 年的市场环境下，网络拥堵偶有发生。GTokenTool 优化了交易指令（Instructions），在单笔交易中尽可能多地打包目标地址。这不仅降低了整体的签名次数，还显著提升了在链上执行的成功率。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;严苛的安全标准
作为一款成熟的工具，GTokenTool 的合约经过了多方审计。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;非托管模式：工具不触碰用户私钥，所有权限仅限于本次交易确认。&lt;/p&gt;

&lt;p&gt;实时模拟：在正式发送前，系统会进行链上模拟运行，告知用户预计消耗的费用及可能失败的原因。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;强大的兼容性
不仅支持原生 SOL，还完美支持 Raydium 资产、Meme 代币以及各类稳定币（USDC/USDT）。对于项目方，它还提供了锁定代币后的分批释放（Vesting）辅助功能。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;四、数据对比：GTokenTool vs 其他主流工具
为了更直观地展示 GTokenTool 的性能，我们将其与市面上常见的几款批量转账方案进行了实测对比：&lt;/p&gt;

&lt;p&gt;评价维度    GTokenTool (2026 版)    传统脚本/代码方案   其他网页版工具
上手难度    ⭐⭐⭐⭐⭐ (零基础) ⭐ (需配置环境)   ⭐⭐⭐ (界面复杂)
转账速度    1000 个地址/分钟    取决于脚本效率   约 500 个地址/分钟
错误校验    自动过滤无效/重复地址 需手动检查 部分支持
手续费   极低（阶梯优惠）仅 Gas (开发成本高)   较高或有隐藏收费
安全性   已审计/无私钥接触   高（自建）中
设备支持    PC + 手机浏览器    仅限 PC   PC 为主
五、常见问题解答 (Q&amp;amp;A)
Q1：GTokenTool 会记录我的钱包私钥吗？&lt;/p&gt;

&lt;p&gt;答：绝对不会。GTokenTool 是一个纯前端交互的 DApp。所有的签名操作都是在你的钱包插件（如 Phantom）中完成的，工具仅向区块链发送交易指令，无法访问你的私钥。&lt;/p&gt;

&lt;p&gt;Q2：如果转账过程中断了怎么办？资金会丢失吗？&lt;/p&gt;

&lt;p&gt;答：Solana 具有原子性。如果交易未打包成功，资金会保留在原钱包。GTokenTool 提供实时状态追踪，如果某一组地址发送失败，你可以一键“断点续传”，无需从头开始。&lt;/p&gt;

&lt;p&gt;Q3：批量转账 500 个地址大约需要多少 SOL 的 Gas 费？&lt;/p&gt;

&lt;p&gt;答：Solana 的网络费用极低。除了工具收取的微量服务费外，链上 Gas 费通常不到 0.05 SOL（视网络拥堵情况波动）。GTokenTool 在发送前会给出精准的费用预估。&lt;/p&gt;

&lt;p&gt;Q4：它支持导入 Excel 表格吗？&lt;/p&gt;

&lt;p&gt;答：支持。你可以直接上传 .csv 或 .txt 文件，格式通常为“地址，数量”。系统会自动识别，无需手动输入。&lt;/p&gt;

&lt;p&gt;Q5：我可以批量发送不同的金额到不同的地址吗？&lt;/p&gt;

&lt;p&gt;答：可以。GTokenTool 支持“等额发送”和“差额发送”两种模式，满足空投和工资发放的不同需求。&lt;/p&gt;

&lt;p&gt;Q6：转账成功后有记录可以查询吗？&lt;/p&gt;

&lt;p&gt;答：有。每一批次的转账都会生成唯一的 Solana Explorer 链接，方便你查看每笔资金的去向和交易状态。&lt;/p&gt;

&lt;p&gt;六、总结
在 Solana 这样一个追求极致速度的公链上，工具的选择直接决定了你的工作效率。GTokenTool 不仅仅是一个转账工具，它是连接普通用户与复杂底层技术的桥梁。&lt;/p&gt;

&lt;p&gt;选择 GTokenTool 的理由总结如下：&lt;/p&gt;

&lt;p&gt;省时：自动化处理原本需要数小时的任务。&lt;/p&gt;

&lt;p&gt;省心：傻瓜式操作，自带校验系统，降低操作风险。&lt;/p&gt;

&lt;p&gt;省钱：合理的打包逻辑帮你节省每一分不必要的 Gas 支出。&lt;/p&gt;

&lt;p&gt;如果你正准备在 2026 年进行一次大规模的代币分发，或者只是想给自己的几十个钱包归集资金，GTokenTool 毫无疑问是目前 Solana 生态中最稳健、最值得信赖的选择，详细参考官方教程：&lt;a href="https://docs.gtokentool.com/kuai-jie-gong-ju/batch-transfer-token" rel="nofollow" target="_blank"&gt;https://docs.gtokentool.com/kuai-jie-gong-ju/batch-transfer-token&lt;/a&gt; 。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Thu, 23 Apr 2026 10:35:09 +0800</pubDate>
      <link>https://soldev.cn/topics/268</link>
      <guid>https://soldev.cn/topics/268</guid>
    </item>
    <item>
      <title>无需编写脚本：利用 GTokenTool 界面化完成 Solana 链上批量转账任务</title>
      <description>&lt;p&gt;正在寻找最快、最安全的 Solana 批量转账工具？GTokenTool 专为 Sol 生态开发者与项目方打造，支持 SPL 代币及 Token2022 协议。单次签名最高处理 380 个地址，1000 个地址仅需签名 3 次。无需存储私钥，前端本地执行，让您的空投任务既高效又安全。&lt;/p&gt;

&lt;p&gt;核心功能亮点
行业顶尖效率相比市面上单次只能发几十个地址的工具，GTokenTool 实现了技术突破：单次签名转账上限达 380 个地址。大规模空投不再需要繁琐的连续签名，大幅节省操作时间。
智能地址管理（支持 CSV/Excel）
一键去重：自动识别并剔除重复接收地址，避免资产浪费。
多样导入：支持手动粘贴、随机生成，或通过上传 CSV/Excel 文件批量导入地址与金额。
余额预览：发送前自动计算代币总额、SOL 租金（ATA 开户费）及剩余余额，预算控制精准透明。
全面兼容 Token 协议不仅支持标准的 SPL 代币，更深度适配最新的 Token2022 标准（如自带交易税、手续费的代币），是目前功能最全的 Solana 批量转账方案。
极致安全保障（非托管模式）
私钥不留痕：所有转账逻辑在浏览器前端完成，平台绝不访问、不存储您的私钥。
隐私隔离：支持连接主流钱包（如 Phantom），并建议配合新钱包使用，确保资产绝对安全。
跨平台无缝操作完美支持 PC 端浏览器与手机端钱包浏览器，随时随地开启空投任务。
适用场景
项目方空投：为数千名早期参与者快速发放治理代币或代币奖励。
链游/公会发薪：通过 Excel 导入功能，定期为多个打金账号批量分发 SOL 或收益。
社区激励计划：向不同活跃度的成员发放不等额的代币奖励。
测试网调试：支持 Devnet（测试网）环境，方便开发者在正式空投前进行流程演练。
准备工作
在开始操作前，请确保您已准备好以下事项：&lt;/p&gt;

&lt;p&gt;设备：一台联网的电脑或一部智能手机。
钱包：已安装 Solana 钱包（如 Phantom 幻影钱包）。
资产：钱包内需存有足额的待转代币，以及少量 SOL 用于支付网络 GAS 费用。
详细操作流程
第一步：连接与配置
访问 GTokenTool 批量转账页面，在右上角连接您的 Solana 钱包，并根据需求选择 Main（主网）或 Dev（测试网）。
&lt;img src="/uploads/photo/gtokentool/4133f2be-7546-4963-9902-95bbc1e99165.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第二步：选择目标代币
在“代币地址”栏输入或选择您要批量发送的代币。系统会自动识别并显示您的当前代币余额。&lt;/p&gt;

&lt;p&gt;第三步：导入接收地址
您可以选择以下三种方式之一导入地址：&lt;/p&gt;

&lt;p&gt;手动输入：在框内粘贴地址，一行一个。
文件上传：点击“上传文件”导入 Excel 或 CSV 格式的地址列表。
生成随机地址：点击“随机地址？点击创建”用于测试或特殊需求。&lt;/p&gt;

&lt;p&gt;第四步：设置转账数量
点击“自动添加数量”，您可以为所有地址设置统一的发送金额，也可以在导入文件中为每个地址指定不同的数量。系统会实时预览总共需要的代币数量。&lt;/p&gt;

&lt;p&gt;第五步：确认并发送
核对地址数量和代币总计无误后，点击“发送交易”。在弹出的钱包窗口中点击“确认”，等待页面显示“全部转账成功！”即可完成任务。&lt;/p&gt;

&lt;p&gt;核心功能
高效批量发送：支持在 Solana 链上批量发送代币，单次签名最高可处理 380 个地址，处理 1000 个地址仅需签名 3 次。
全币种支持：除了普通代币，还兼容支持 SPL Token 2022 手续费类型的代币。
灵活的金额分配：用户可以为所有地址设置统一的转账金额，也可以为每个地址设置不同的转账数量。
易用性与自动化
多样化地址导入：支持手动输入地址（英文逗号隔开）、点击“随机地址”生成，或通过上传 Excel/CSV 文件批量导入。
智能处理：具备自动去重功能，能够识别并剔除重复的接收地址。
实时预览：在发送交易前，系统会自动计算并显示所需的代币总额、钱包余额以及去重后的地址数量。
安全与性能
安全性保障：私钥不存储在平台，所有操作均基于前端执行，用户也可以选择使用新钱包操作以确保安全。
跨平台兼容：工具支持在电脑和手机端通过浏览器进行操作。
实时反馈：交易完成后会提供明确的状态提示（如“全部转账成功！”），并在遇到节点网络问题时提供刷新建议。
Solana 链批量转账工具对比表
比较维度 GTokenTool (本工具) 行业通用工具 (如 Smithii/SlerfTools)普通钱包手动转账单次签名上限最高 380 个地址通常 20–100 个地址每次 1 个地址操作效率极高 (1000 地址仅需 3 次签名) 中等 (需多次分批签名) 极低 Token2022 支持全面支持 (含手续费类型代币) 部分支持取决于钱包适配地址导入方式多样化 (手动/CSV/Excel/随机生成) 通常仅支持手动或 CSV 仅手动粘贴地址去重功能自动识别并去重部分具备无金额分配方案灵活 (统一金额或按地址自定义) 通常支持需逐个手动输入安全性前端执行，不存私钥多数为前端执行安全使用门槛零技术背景要求较低无&lt;/p&gt;

&lt;p&gt;为什么选择 GTokenTool？
处理大批量空投最快：在 Solana 链上，单次签名能处理的地址数直接决定了你的工作量。GTokenTool 的 380 个/次签名效率处于行业顶尖水平。
适配最新代币标准：随着 Token2022 标准（如带交易税的代币）普及，GTokenTool 对该协议的深度优化保证了转账不会因为协议不兼容而失败。
成本透明且可控：系统会实时显示总共需要的代币和余额，并提醒新地址开户所需的 SOL 租金（约 0.002 SOL，未来可回收），帮助您更精确地管理空投预算。
GTokenTool 是一款专为 Solana 链设计的高效批量转账与空投工具。它通过简化操作流程和提升单次交易处理量，解决了传统转账效率低下的痛点。&lt;/p&gt;

&lt;p&gt;使用建议
如果您需要向大量用户分发代币（如社区空投等），GTokenTool 提供的实时余额预览、自动开户费提醒以及跨平台支持（电脑/手机均可使用）使其成为目前 Solana 生态中极其稳健的工具选择。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Tue, 21 Apr 2026 10:43:03 +0800</pubDate>
      <link>https://soldev.cn/topics/267</link>
      <guid>https://soldev.cn/topics/267</guid>
    </item>
    <item>
      <title>GTokenTool 市值机器人重磅优化：新增「一键配置报单机器人」功能，精准过滤做市地址，推送真实用户买入通知！</title>
      <description>&lt;p&gt;GTokenTool 团队再次加速迭代！为了让用户在高频波动的加密市场中更高效捕捉真实信号，我们对市值机器人进行了重要功能升级 — — 正式上线一键配置报单机器人功能！&lt;/p&gt;

&lt;p&gt;优化亮点：一键配置，智能过滤真实买入信号
此前，市值机器人已能实时监控代币市值变化和链上交易播报。但很多用户反馈：自身做市地址（MM 地址）的频繁刷单播报会淹没真实用户买入信号，干扰判断。&lt;/p&gt;

&lt;p&gt;本次优化核心功能：&lt;/p&gt;

&lt;p&gt;一键开启报单机器人：在市值机器人页面，只需点击「一键配置报单机器人」，即可快速完成设置，无需手动编写复杂规则。
智能过滤自身做市地址：系统自动识别并屏蔽您自身做市地址相关的所有播报，完全消除自刷干扰。
精准推送真实用户买入通知：仅推送来自真实用户的买入交易提醒，让您第一时间掌握有效资金流入信号。
暂不支持内盘：当前版本专注于外盘真实用户信号，后续我们会根据用户反馈持续扩展支持范围。
这一功能让市值监控从“信息轰炸”升级为“精准情报”，极大提升了交易决策效率，尤其适合需要实时跟单、监控新币或 meme 币热度的用户。&lt;/p&gt;

&lt;p&gt;使用方式超简单（30 秒上手）
打开市值机器人页面：&lt;a href="https://robotv2.gtokentool.com/#/marketbot" rel="nofollow" target="_blank"&gt;https://robotv2.gtokentool.com/#/marketbot&lt;/a&gt;
找到并开启“高级设置”并点击「一键配置报单机器人」按钮
选择需要监控的代币/地址，确认过滤规则
保存配置，即可实时接收干净、真实的买入推送通知
&lt;img src="/uploads/photo/gtokentool/def48af8-06b3-43aa-907d-5b0b98d4fe25.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;整个流程无需编程基础，一键搞定，适合新手和老手共同使用。&lt;/p&gt;

&lt;p&gt;为什么这次优化如此重要？
在当前加密市场，做市地址刷量现象普遍存在。大量无效播报不仅消耗用户精力，更容易错过真正的社区买入和鲸鱼入场信号。GTokenTool 市值机器人通过本次优化，真正实现了“去噪提纯”，让每一条推送都更有价值。GTokenTool 始终以用户实际交易痛点为导向，不断打磨产品。后续我们还将推出更多智能化功能，敬请期待！&lt;/p&gt;

&lt;p&gt;立即体验优化后的市值机器人：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://robotv2.gtokentool.com/#/marketbot" rel="nofollow" target="_blank"&gt;https://robotv2.gtokentool.com/#/marketbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;有任何使用问题或功能建议，欢迎随时在 GTokenTool 官方渠道反馈。我们会继续加速迭代，为每一位用户提供更强大、更聪明的链上工具！&lt;/p&gt;

&lt;p&gt;GTokenTool — — 让加密交易，更简单、更高效！&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Mon, 20 Apr 2026 10:34:37 +0800</pubDate>
      <link>https://soldev.cn/topics/266</link>
      <guid>https://soldev.cn/topics/266</guid>
    </item>
    <item>
      <title>2026 最新全链一键发币教程：从零开始教你创建代币</title>
      <description>&lt;p&gt;在 Web3 领域，时间就是金钱。如果你还在寻找如何编写智能合约、如何部署代码，那你就落后了。本文将带你了解目前市面上最流行、最安全的一键发币工具——PandaTool（熊猫助手），让你在没有任何编程基础的情况下，30 秒内就能在 Solana、BSC、ETH 等主流链上发行属于自己的代币。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/Jack5656/181f142b-1702-49bd-889e-b6bdc71e9b14.jpg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;什么是一键发币？
一键发币是指通过图形化界面（No-Code Platform），用户只需填写代币名称、符号、总量等基本信息，由平台自动生成并部署经过审计的智能合约。这种方式极大地降低了技术门槛，避免了代码漏洞带来的安全风险。&lt;/p&gt;

&lt;p&gt;为什么选择 PandaTool 进行一键发币？
作为资深的区块链运营工具，PandaTool 在开发者和项目方圈子里口碑极佳。选择它的理由非常直观：&lt;/p&gt;

&lt;p&gt;全链路支持：支持 Solana (Token-2022)、BSC (BEP20)、Ethereum (ERC20)、Base、TRON、Sui、TON 等主流公链。
费用透明：仅收取极低的手续费（例如 Solana 仅需 0.1 SOL），没有任何隐形扣费。
功能丰富：除了发币，还提供批量转账、市值管理（MM）、代币锁仓、放弃权限等一站式服务。
安全可靠：合约模板经过多重审计，杜绝了常见的“后门”风险。
PandaTool 一键发币操作步骤
第一步：访问官网并连接钱包
进入 PandaTool 官网，点击右上角连接你的 Web3 钱包（如 MetaMask 或 Phantom）。请确保你的钱包里有足够的 Gas 费。&lt;/p&gt;

&lt;p&gt;第二步：填写代币参数
在菜单栏选择“一键发币”，根据你想要的公链选择对应的板块。&lt;/p&gt;

&lt;p&gt;代币全称：例如 "Panda Token"
代币符号：例如 "PANDA"
发行总量：建议根据项目需求设定。
精度：通常默认为 18（Solana 默认为 9）。
运营小贴士：在 PandaTool 上，你还可以勾选一些高级功能，比如“是否销毁”、“是否开启白名单”等，这些功能都能在发币时勾选一键完成。&lt;/p&gt;

&lt;p&gt;第三步：一键部署
确认无误后，点击“创建代币”。在钱包弹窗中点击确认签名。大约等待 10-30 秒，你的代币就已经成功部署在链上了！你可以在区块浏览器上查看到它的详细信息。&lt;/p&gt;

&lt;p&gt;常见问题 (FAQ)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;一键发币出来的合约安全吗？
PandaTool 采用的是标准化、模块化的智能合约。相比于个人找兼职开发写的代码，标准化合约在安全性、兼容性和去中心化交易所（DEX）的识别上更具优势。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;发币后如何增加流动性？
在 PandaTool 成功发币后，你可以直接使用其提供的配套工具，如通过 PandaTool 加池工具来创建流动性池，让全球用户都能买到你的代币。亦或者通过锁工具，来进行代币锁仓或者锁池。还可以通过挖矿工具，来创建挖矿 DAPP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;为什么我搜索不到我的代币？
新发行的代币需要一定的时间被区块浏览器索引。建议在发币后，第一时间在 PandaTool 后台上传代币图标和社交链接（Metadata），这样在钱包里看起来会更专业。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;总结
无论你是想做 MEME 币尝试，还是为初创项目提供积分支持，一键发币都是最高效的选择。PandaTool 凭借其极简的操作流程和强大的多链支持，已经成为目前 Web3 运营者的首选工具。&lt;/p&gt;

&lt;p&gt;如果你在操作过程中遇到任何问题，可以随时查阅 PandaTool 帮助文档，或者加入官方社区获取支持。&lt;/p&gt;</description>
      <author>Jack5656</author>
      <pubDate>Mon, 30 Mar 2026 17:46:49 +0800</pubDate>
      <link>https://soldev.cn/topics/265</link>
      <guid>https://soldev.cn/topics/265</guid>
    </item>
    <item>
      <title>开发者友好：用 GTokenTool 实现 Meteora DAMM V2 流动性一键部署</title>
      <description>&lt;p&gt;Meteora 是 Solana 生态中最受欢迎的流动性协议之一，而 DAMM V2（Dynamic Automated Market Maker V2）是其最新一代动态做市池，专为新币发行和 LP（流动性提供者）优化设计。它拥有 动态费率 + NFT 仓位 + 灵活锁仓 + 稳定币收佣 等核心特性，能有效防狙击、稳开盘，同时大幅提升 LP 体验。&lt;/p&gt;

&lt;p&gt;使用 GTokenTool 平台，你无需编写复杂代码，只需几分钟就能在 Solana 主网上创建 DAMM V2 流动性池。&lt;/p&gt;

&lt;p&gt;准备工作（务必提前做好）
一台电脑或手机（推荐电脑操作更稳定）
Solana 钱包（推荐 Phantom 钱包，可参考官方安装教程）
钱包里至少准备 0.11 SOL（用于手续费和 gas）
你要创建流动性的代币（已铸造完成且在钱包中）
详细创建步骤
步骤 1：进入页面并连接钱包
打开 GTokenTool 创建流动性页面：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sol.gtokentool.com/zh-CN/liquidityManagement/CreatePool" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com/zh-CN/liquidityManagement/CreatePool&lt;/a&gt; 右上角切换到 Main 主网（演示时可用测试网），点击连接 Phantom 钱包并授权。
&lt;img src="/uploads/photo/gtokentool/e45e33bd-edef-4707-9fec-5d0e05d4f7b3.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;步骤 2：选择池子类型
GTokenTool 支持多种池子：AMM、AMM V4、CPMM、CLMM、PumpSwap、DLMM、DAMM V2、Orca 等。&lt;/p&gt;

&lt;p&gt;Write on Medium
直接选择 DAMM V2 池 即可。
&lt;img src="/uploads/photo/gtokentool/fa4d141b-2d38-42a7-a8c7-96738e074bbc.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;步骤 3：设置交易对
基础代币：填写你刚创建的、尚未有任何价值的代币地址。
报价代币：选择具有市场价值的代币，通常是 SOL、USDC、USDT 或 USD1。
&lt;img src="/uploads/photo/gtokentool/dda5adb0-e263-4fec-87c7-9b3195dcf107.png!large" title="" alt=""&gt;
步骤 4：填写具体参数
基础代币数量：输入你想放入池子的代币数量（不要超过钱包实际余额）。
报价代币数量：输入对应价值的 SOL/USDC 等数量（同样不要超额）。
系统会自动计算初始价格，你可实时预览价格曲线是否合理。
&lt;img src="/uploads/photo/gtokentool/2f8f749e-bdd8-47b9-aa7a-c068fa94f303.png!large" title="" alt=""&gt;
步骤 5：可选设置 — — 将代币作为手续费
如果你希望用自己发行的代币支付部分手续费，可在此勾选开启（根据项目需求灵活选择）。
&lt;img src="/uploads/photo/gtokentool/42dba12f-024d-48da-a31f-2f923410b4f8.png!large" title="" alt=""&gt;
步骤 6：点击创建流动性
确认所有参数无误后，点击“创建流动性”按钮。
钱包会弹出确认窗口，请在 60 秒内尽快确认交易。创建成功后：&lt;/p&gt;

&lt;p&gt;系统会弹出 池子地址（务必复制保存）。
建议等待 30 秒后再进行交易，此时费率会降至最低，流动性最稳定。
&lt;img src="/uploads/photo/gtokentool/3b159cb2-c413-4846-8745-52c632cd0857.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;注意事项与小贴士
创建过程中请保持钱包和网络稳定，避免中途断网导致失败。
池子创建后，DAMM V2 的动态费率机制会自动根据市场波动调整，更有利于防狙击和保护 LP。
建议创建完成后，立即在 Meteora 官方界面或 Raydium 等 DEX 添加更多流动性，或设置锁仓，提升项目信誉。
若遇到 Phantom 钱包确认问题，可尝试刷新页面或切换网络后重试。
总结
通过 GTokenTool 创建 Meteora DAMM V2 流动性池，整个过程仅需 2–3 分钟，远比手动部署简单高效。无论是新项目方还是个人开发者，都能轻松实现“发币即开池”，让代币快速获得真实交易深度。&lt;/p&gt;

&lt;p&gt;官方参考文档：&lt;a href="https://docs.gtokentool.com/solana/liquidity-management/meteora-damm-v2-create-liquidity" rel="nofollow" target="_blank"&gt;https://docs.gtokentool.com/solana/liquidity-management/meteora-damm-v2-create-liquidity&lt;/a&gt;现在就打开 GTokenTool，试试一键创建你的 DAMM V2 池子吧！&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Wed, 25 Mar 2026 10:33:20 +0800</pubDate>
      <link>https://soldev.cn/topics/264</link>
      <guid>https://soldev.cn/topics/264</guid>
    </item>
    <item>
      <title>GTokenTool 创建 Orca 稳定池教程</title>
      <description>&lt;p&gt;准备事项
一台电脑或者一部手机
Solana 钱包（幻影钱包 Phantom 安装教程）
钱包最少准备** 0.12 SOL**
要创建流动性池的代币
Solana 创建 Orca 稳定池教程&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;连接钱包
进入 GTokenTool 创建流动性页面，右上角选择 Main 网络并连接钱包。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;创建流动性池： &lt;a href="https://sol.gtokentool.com/zh-CN/liquidityManagement/CreatePool" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com/zh-CN/liquidityManagement/CreatePool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/8ce59339-309a-4d97-8f11-0924f51c2874.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;选择池子
GTokenTool 支持用户创建 AMM 池、AMM V4 池、CPMM 池、CLMM 稳定池、PumpSwap 池、DLMM 稳定池和 Orca 稳定池，我们在这里选择 Orca 稳定池。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/377ad43e-08ab-46a5-8172-7077d0cc5ca0.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;选择要创建流动性池的交易对
&lt;strong&gt;基础代币：&lt;/strong&gt;填写您创建的还没有任何价值的代币。
&lt;strong&gt;报价代币：&lt;/strong&gt;具有市场价值的代币，通常是 SOL、USDC、USDT 或 USD1。
&lt;img src="/uploads/photo/gtokentool/3647f248-5b0c-4fb1-9beb-373edd0a7e99.png!large" title="" alt=""&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;选择加池模式
GTokenTool 为您提供了两种加池模式（默认为单币加池）：&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;双币加池：&lt;/strong&gt;同时加入用户创建的代币和价值币。
&lt;strong&gt;单币加池：&lt;/strong&gt;只添加用户创建的代币。
&lt;img src="/uploads/photo/gtokentool/210919ac-e6de-44df-97de-8753a3f54362.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;双币加池参数填写
&lt;strong&gt;初始价格：&lt;/strong&gt;设置池子的初始价格。
&lt;strong&gt;存入数量：&lt;/strong&gt;设置存入价值币（比如 SOL）的数量，系统会自动为你计算出需要存入的基础代币数量。如果弹出钱包爆红，可能是你的代币数量太少，可以减少存入数量再次尝试。
*&lt;em&gt;钱包预留余额估算： *&lt;/em&gt;钱包余额需要大于（Orca 官方收取 0.02 SOL + 服务费用 0.08 SOL，入池数量，预留 0.01 SOL）的总和。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;双币加池效果展示
参数填写好后，点击“创建流动性”。钱包弹出后，点击“确认”。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;单币加池参数填写
&lt;strong&gt;单币加池：&lt;/strong&gt;打开单币加池开关。
&lt;strong&gt;初始价格：&lt;/strong&gt;设置池子的初始价格。
&lt;strong&gt;存入数量：&lt;/strong&gt;设置存入基础代币的数量，不需要存入价值币（比如 SOL）。
钱包预留余额估算： *&lt;strong&gt;&lt;em&gt;钱包余额需要大于（Orca 官方收取 0.02 SOL + 服务费用 0.08 SOL，预留 0.01 SOL）的总和。
*&lt;/em&gt;温馨提示：&lt;/strong&gt;单币加池代币是无法卖出的，只能买入。如果你希望代币可以卖出，需要往池子里加入价值币才行，通过我们的市值机器人买入一笔就行。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;单币加池效果展示
参数填写好后，点击“创建流动性”。钱包弹出后，点击“确认”。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GTokenTool | 创建代币、批量空投和做市机器人等 Solana 工具集&lt;/p&gt;

&lt;p&gt;安全、开源，给 Solana 用户带来最便利的一站式体验。&lt;/p&gt;

&lt;p&gt;GTokenTool 社群：&lt;/p&gt;

&lt;p&gt;Telegram：&lt;a href="https://t.me/gtokentool" rel="nofollow" target="_blank"&gt;https://t.me/gtokentool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Twitter: &lt;a href="https://x.com/gtokentool" rel="nofollow" target="_blank"&gt;https://x.com/gtokentool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gitbook：&lt;a href="https://docs.gtokentool.com/" rel="nofollow" target="_blank"&gt;https://docs.gtokentool.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github：&lt;a href="https://github.com/Gtokentool/docs/blob/master/SUMMARY.md" rel="nofollow" target="_blank"&gt;https://github.com/Gtokentool/docs/blob/master/SUMMARY.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;YouTube：&lt;a href="https://www.youtube.com/@GTokenTool" rel="nofollow" target="_blank"&gt;https://www.youtube.com/@GTokenTool&lt;/a&gt;&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Wed, 18 Mar 2026 11:45:04 +0800</pubDate>
      <link>https://soldev.cn/topics/263</link>
      <guid>https://soldev.cn/topics/263</guid>
    </item>
    <item>
      <title>GTokenTool 发币平台 Solana 批量移除流动性</title>
      <description>&lt;p&gt;在 Solana 生态系统中，流动性管理是交易者和开发者的重要任务之一。特别是在使用 PumpSwap 等 DEX 时，批量移除流动性可以帮助您高效管理钱包资产，避免手动操作的繁琐过程。GTokenTool 作为一款一键发币工具平台，提供了一键批量移除 PumpSwap 流动性的功能，让您节省时间、优化交易体验。&lt;/p&gt;

&lt;p&gt;准备事项
在开始批量移除流动性之前，请确保您已准备好以下条件：&lt;/p&gt;

&lt;p&gt;设备：一台电脑或手机。
Solana 钱包：推荐使用 Phantom 钱包。如果尚未安装，请参考 Phantom 钱包安装教程。
钱包余额：确保钱包中有足够的 SOL 余额（每笔流动性移除需 0.001 SOL）。
批量移除流动性的具体流程
GTokenTool 的批量移除流动性页面简单易用，以下是详细步骤。操作入口：&lt;a href="https://sol.gtokentool.com/zh-CN/liquidityManagement/batchRemove" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com/zh-CN/liquidityManagement/batchRemove&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;步骤 1: 连接钱包
打开上述批量移除流动性页面。
在页面右上角，选择“Main”网络（主网）。如果用于测试，可切换到测试网。
点击“连接钱包”按钮，选择您的 Phantom 或其他兼容钱包，并授权连接。
&lt;img src="/uploads/photo/gtokentool/a8035350-17eb-4003-9536-510c2612530b.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;连接成功后，页面将显示您的钱包地址和相关流动性池信息。&lt;/p&gt;

&lt;p&gt;步骤 2: 选择要移除的流动性
在操作前，建议点击“刷新列表”（Refresh List）按钮，以获取最新的流动性池数据。这可以确保您看到钱包中所有 PumpSwap 流动性的最新状态。
浏览列表，选择您想要移除的流动性位置。您可以多选，页面下方会显示已选项目数量。
&lt;img src="/uploads/photo/gtokentool/3223686c-284d-4150-b852-4b1510250def.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;步骤 3: 点击移除
确认选择无误后，点击页面下方的“移除”（Remove）按钮。
钱包会弹出确认窗口，仔细检查交易细节（如费用、流动性数量）。
点击“确认”完成交易。
交易成功后，页面会弹出成功提示。您可以查看钱包或区块链浏览器（如 Solana Explorer）确认资产已返回。
&lt;img src="/uploads/photo/gtokentool/534ddb0e-771e-4380-bad1-bec5d9a447aa.png!large" title="" alt=""&gt;
&lt;img src="/uploads/photo/gtokentool/e1c8e6ab-e8fa-45f1-9032-333823248037.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;示例：假设您的钱包中有 5 个 PumpSwap 流动性池，选择其中 3 个移除。刷新列表后勾选它们，点击移除，支付约 0.003 SOL（3 * 0.001 SOL），几秒内完成。&lt;/p&gt;

&lt;p&gt;结语
通过 GTokenTool 的批量移除流动性功能，您可以轻松管理 Solana 钱包中的资产，提升效率。如果您是 Solana 新手，这是一个很好的起点。更多功能如一键发币或批量空投，请访问 GTokenTool 主页。加入 GTokenTool 社区获取最新更新：&lt;/p&gt;

&lt;p&gt;Telegram: &lt;a href="https://t.me/gtokentool" rel="nofollow" target="_blank"&gt;https://t.me/gtokentool&lt;/a&gt;
Twitter:&lt;a href="https://x.com/gtokentool" rel="nofollow" target="_blank"&gt;https://x.com/gtokentool&lt;/a&gt;&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Tue, 10 Mar 2026 10:51:33 +0800</pubDate>
      <link>https://soldev.cn/topics/262</link>
      <guid>https://soldev.cn/topics/262</guid>
    </item>
    <item>
      <title>GTokenTool 代币快照使用教程</title>
      <description>&lt;p&gt;在加密货币和区块链世界中，代币快照（Token Snapshot）是一个非常实用的工具，尤其对于项目方、开发者或社区管理者来说。它可以帮助你快速捕捉特定代币在区块链上的持有者信息，用于空投、分红或其他营销活动。如果你是一个新手，对区块链工具还不太熟悉，不要担心！本文将以最简单易懂的方式，详细讲解如何使用 GTokenTool 平台的代币快照功能。&lt;/p&gt;

&lt;p&gt;代币快照的详细操作步骤
代币快照本质上是区块链上的一种数据抓取技术，它在特定时间点记录所有持有某代币的地址及其余额信息。这在 DeFi（去中心化金融）、NFT 项目或代币发行中非常常见。例如，当一个项目要进行空投时，就需要通过快照来确定谁有资格领取奖励。GTokenTool 平台提供了一个便捷的在线工具，让新手无需编写代码，就能完成这一过程。下面，我们从基础准备开始，逐步拆解每个步骤。&lt;/p&gt;

&lt;p&gt;第一步：了解前提条件
作为新手，首先你需要一个支持区块链的钱包，比如 MetaMask 或 Trust Wallet。这些钱包可以连接到以太坊主网或其他兼容链。GTokenTool 是一个一键发币工具平台，专注于简化区块链操作。访问官网（&lt;a href="https://gtokentool.com" rel="nofollow" target="_blank"&gt;https://gtokentool.com&lt;/a&gt;），登录平台，导航到“代币工具”栏目，找到“代币快照”页面。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/ded87b62-2c59-4c77-bbe3-e4a2a89d2e75.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第二步：连接主网
进入代币快照页面后，第一件事就是连接主网。页面上会有一个“网络节点”选择框，默认可能是测试网，但我们需要切换到“Main”主网。这是因为主网是真实的区块链环境，能获取真实的代币数据。&lt;/p&gt;

&lt;p&gt;操作步骤：&lt;/p&gt;

&lt;p&gt;点击“连接钱包”按钮。系统会弹出钱包授权窗口，选择你的钱包（如 MetaMask）。
确认连接。如果是第一次，可能需要批准权限。
选择“Main”网络节点。GTokenTool 支持以太坊主网（ETH）、BSC（Binance Smart Chain）等常见链，根据你的代币所在链选择。
新手常见问题：如果连接失败，检查你的钱包是否已解锁，或者网络是否拥堵。连接成功后，页面会显示你的钱包地址，这表示你已准备好下一步。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/81e6dee9-cb24-425a-b6cb-065e395e2e45.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第三步：输入代币地址
现在，输入你想快照的代币合约地址。这是一个关键步骤。代币地址通常是像“0x…”开头的字符串，你可以从 Etherscan（&lt;a href="https://etherscan.io" rel="nofollow" target="_blank"&gt;https://etherscan.io&lt;/a&gt;）或项目官网获取。&lt;/p&gt;

&lt;p&gt;如何找到代币地址？&lt;/p&gt;

&lt;p&gt;如果是热门代币，如 USDT，在搜索引擎中输入“USDT contract address”即可找到。
对于自定义代币，项目方通常会公布在白皮书或社交媒体上。
输入后，确保地址正确无误。新手提示：复制粘贴时，避免多余空格。输入错误会导致查询失败。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/654a456a-4c9e-4d7b-8f68-8732077bffdf.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第四步：点击“查询”并查看基本信息
点击“查询”按钮后，系统会开始从区块链上拉取数据。这可能需要几秒到几分钟，取决于网络速度和代币持有者数量。&lt;/p&gt;

&lt;p&gt;查询结果会显示：&lt;/p&gt;

&lt;p&gt;代币的简称（Symbol），如“ETH”或“GT”。
历史持币人数：这是一个重要指标，显示有多少地址持有该代币。这有助于你评估代币的流行度和社区规模。
例如，如果一个新代币的历史持币人数只有 100 人，那它可能还处于早期阶段；如果超过 10 万人，则表明它有较强的社区基础。新手在这里可以暂停一下，分析这些数据，为后续决策提供参考。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/94d7605a-f2d9-42b4-bd6e-d43ec5ef682a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第五步：快照数据筛选
这是教程的核心部分。查询后，你可以看到一个数据筛选界面。这里允许你自定义过滤条件，以获取更精确的快照数据。&lt;/p&gt;

&lt;p&gt;常见筛选选项：&lt;/p&gt;

&lt;p&gt;余额阈值：设置最小持有量，例如只快照持有超过 100 个代币的地址。这可以排除小额持有者，专注于大户。
时间范围：选择快照的起始和结束时间点。默认是当前时间，但你可以回溯历史数据。
地址类型：筛选普通地址或合约地址（智能合约）。
其他过滤：如排除特定地址（例如项目方钱包），或按余额排序。
新手操作建议：从简单开始，先不设置任何筛选，直接查看全量数据。逐步添加条件，比如“余额 &amp;gt; 1”来过滤尘埃地址（持有极少量代币的地址）。筛选后，页面会实时更新预览数据，确保你满意再继续。&lt;/p&gt;

&lt;p&gt;为什么筛选重要？区块链数据庞大，未筛选的快照可能包含数万个地址，下载文件会很大。通过筛选，你可以聚焦核心用户，提高效率。&lt;/p&gt;

&lt;p&gt;第六步：点击“立即快照”并下载文件
一切准备就绪后，点击“立即快照”按钮。系统会生成一个 EXCEL 文件，包含筛选后的数据。文件通常包括列如：地址、余额、持有比例等。&lt;/p&gt;

&lt;p&gt;下载过程：&lt;/p&gt;

&lt;p&gt;点击按钮，等待生成。
文件自动下载到你的设备，通常命名为“token_snapshot.xlsx”。
打开 EXCEL 查看：第一列是地址，第二列是余额，第三列可能是交易历史摘要。
新手注意：如果下载失败，检查浏览器权限或网络。文件是 CSV 或 XLSX 格式，便于导入其他工具如 Google Sheets 进行进一步分析。&lt;/p&gt;

&lt;p&gt;第七步：后续处理和应用
快照完成后，你可以用这些数据做什么？&lt;/p&gt;

&lt;p&gt;空投：将新代币分发给这些持有者。
分析：计算持有集中度（Gini 系数），评估项目健康。
营销：联系大户进行合作。
整个过程对于新手来说，可能只需 10–20 分钟。实践几次后，你会发现它比手动查询区块链浏览器高效得多。&lt;/p&gt;

&lt;p&gt;总结
通过这篇代币快照使用教程，我们从导语到详细步骤，再到数据对比和问答，全面覆盖了新手所需知识。GTokenTool 平台的代币快照功能简单高效，让你无需深厚技术背景，就能处理区块链数据。记住，实践是最好的老师：现在就去平台试一试一个小代币的快照，你会发现它多么实用。未来，随着 Web3 的发展，这样的工具将越来越重要。如果你有更多疑问，欢迎加入官方电报群（&lt;a href="https://t.me/gtokentool" rel="nofollow" target="_blank"&gt;https://t.me/gtokentool&lt;/a&gt;）交流。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Fri, 06 Mar 2026 11:17:39 +0800</pubDate>
      <link>https://soldev.cn/topics/261</link>
      <guid>https://soldev.cn/topics/261</guid>
    </item>
    <item>
      <title>GTokenTool 市值机器人优化升级：新增薄饼 V4 交易与一键买入功能，提升用户交易效率</title>
      <description>&lt;p&gt;2026 年 2 月 27 日 – 作为全网 NO1 的 Web3.0 工具平台，GTokenTool 宣布对其币安市值机器人进行重大优化升级。此次更新聚焦于提升用户在加密货币市场管理中的便利性和效率，新增了薄饼 V4（PancakeSwap V4）交易支持以及一键买入功能。这一举措进一步巩固了 GTokenTool 在 DeFi 领域的领先地位，帮助用户更轻松地实现市值管理和 token 交易。&lt;/p&gt;

&lt;p&gt;GTokenTool 是一个基于区块链技术的在线工具箱，专为快速增长的加密货币去中心化金融（DeFi）用户设计。该平台提供可视化界面，用户无需编写代码即可快速创建、部署和管理自己的加密货币。支持多条公链，包括 Ethereum、Binance Smart Chain (BSC)、ARB Chain 等，并可将 token 上市至 PancakeSwap、UniSwap 等主流 DEX。此次优化升级正是基于用户反馈和市场趋势，针对币安市值机器人的核心功能进行了针对性增强。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/c89faded-9c1a-43cf-8960-2ad3b3740e3d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;优化亮点一：增加薄饼 V4 交易支持&lt;/p&gt;

&lt;p&gt;薄饼 V4 作为 PancakeSwap 的最新版本，带来了更低的交易费用、更高的流动性以及优化的 AMM 机制。GTokenTool 币安市值机器人此次新增对薄饼 V4 的全面集成，用户可以无缝接入这一先进 DEX 进行交易操作。这不仅提升了交易速度和安全性，还允许用户在 BSC 链上更高效地管理 token 的市场价值。例如，用户可以通过机器人实时监控市值波动，并在薄饼 V4 上执行批量交易或流动性提供，进一步降低滑点风险。该功能特别适合那些希望在高流动性环境中操作的 DeFi 从业者和项目方，帮助他们实现更稳定的市值增长。&lt;/p&gt;

&lt;p&gt;优化亮点二：新增一键买入功能&lt;/p&gt;

&lt;p&gt;为简化用户操作，GTokenTool 引入了一键买入功能。这一创新允许用户通过单一点击完成 token 的购买流程，无需手动输入地址或多次确认步骤。结合币安的 API 集成，该功能支持快速从钱包中扣款并执行买入，支持多种支付方式，包括稳定币和主流加密资产。这大大降低了新手用户的入门门槛，同时为经验丰富的交易者节省时间。在市值管理场景中，一键买入可与机器人监控相结合，实现自动化响应市场机会，例如在 token 价格低谷时即时买入以拉升市值。&lt;/p&gt;

&lt;p&gt;此次升级不仅提升了机器人的实用性，还强化了其与币安生态的深度融合。GTokenTool 表示，这些优化旨在帮助用户在 volatile 的加密市场中获得竞争优势。根据平台数据，升级后用户交易效率预计提升 30% 以上，同时减少操作错误。此外，GTokenTool 继续强调智能合约的透明度和公平性，确保所有操作符合区块链最佳实践。&lt;/p&gt;

&lt;p&gt;感兴趣的用户可立即访问市值机器人链接：&lt;a href="https://robotv2.gtokentool.com/#/marketbot" rel="nofollow" target="_blank"&gt;https://robotv2.gtokentool.com/#/marketbot&lt;/a&gt;
，体验这些新功能。GTokenTool 团队承诺将持续迭代产品，未来还将探索更多链上工具和 AI 辅助功能，以满足全球 DeFi 社区的需求。&lt;/p&gt;

&lt;p&gt;关于 GTokenTool：成立于 Web3.0 浪潮中，GTokenTool 已支持数千个 token 项目发行和销售，覆盖一键发币、NFT 铸造、市值管理等多项服务。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Fri, 27 Feb 2026 19:33:28 +0800</pubDate>
      <link>https://soldev.cn/topics/260</link>
      <guid>https://soldev.cn/topics/260</guid>
    </item>
    <item>
      <title>8 步掌握 Flap 代币创建与内盘买入捆绑策略</title>
      <description>&lt;p&gt;币安 Flap 内盘创建代币的同时进行代币买入操作，有效简化交易流程并加速市场参与，快人一步，抢得先机，从而更早获得潜在的收益。&lt;/p&gt;

&lt;p&gt;准备事项
一台电脑或者一部手机
BSC 钱包（小狐狸 MetaMask 钱包安装教程）
钱包最少准备 0.031 BNB
要买入的地址私钥和一些 BNB
Flap 创建并捆绑买入步骤
第 1 步，连接钱包
进入页面：&lt;a href="https://www.gtokentool.com/flap" rel="nofollow" target="_blank"&gt;https://www.gtokentool.com/flap&lt;/a&gt;，点击右上角，连接小狐狸钱包，并切换到币安链主网。完成后，会看到“链名称”和 您的“钱包地址” ，如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/fde6d1b7-126b-4d68-8a49-3366ecef464f.jpg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 2 步，填写信息并上传图片
假设我们创建一个代币名称为”蝴蝶内盘创建并买入”的代币，填写信息如下：&lt;/p&gt;

&lt;p&gt;Logo：图片最大不能超过 1M&lt;/p&gt;

&lt;p&gt;代币名称：蝴蝶内盘创建并买入&lt;/p&gt;

&lt;p&gt;代币简称：Flap 创建并买入&lt;/p&gt;

&lt;p&gt;描述：GTokenTool — — 蝴蝶内盘创建并买入&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/f541ac22-b1c3-456c-8dda-c6dd99c988e9.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 3 步，选择募捐币种
这里我选择 BNB，也可以选择其他的币种（USDT、USD1、BUSD、U、DOGE、FIST）。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/df79bed7-ee1f-4631-b82a-92ea13bfff3f.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 4 步，添加联系方式（选填）
&lt;img src="/uploads/photo/gtokentool/f2f9aa2e-9c70-4dad-bff9-8e58b4effe6d.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 5 步，税收设置（选填）
税收分配总计要为 100%，可设置分红最低余额以及接收钱包。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/089ce522-8c2c-4f39-9e9a-81dc26c5be5a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 6 步，导入钱包
手动复制填写，一行一个。&lt;/p&gt;

&lt;p&gt;买入参数设置&lt;/p&gt;

&lt;p&gt;导入的钱包请全部使用新地址。
所有服务费以及创建代币的费用由导入的钱包第一个钱包进行支付，请保证余额充足。
每个钱包预留 0.001 BNB 作为买入 Gas。
建议您在使用涉及私钥的功能后，及时更换钱包。
&lt;img src="/uploads/photo/gtokentool/f621b822-42e0-45ae-b286-45a58eb23533.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 7 步，设置买入金额
可单独设置，也可批量添加。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/77eb27af-1364-484e-843b-ca08ec70fd20.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 8 步，点击“创建”
点击“创建”，等待一会。创建成功后，会有弹窗显示代币地址。下方也会显示代币地址，可点击下方的代币地址查看代币信息。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/088f4f32-2de8-445b-ab3a-97cf34f78cb9.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这样 Flap 创建并捆绑买入整个流程就结束了，后面大家就可以自行操作啦！&lt;/p&gt;

&lt;p&gt;常见问题：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;这个功能是怎么收费的？
全网最低费用，阶梯收费低至 0.005 BNB/每地址。10个以下地址0.03 BNB/每地址，10个钱包以上仅需0.005 BNB/每地址。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;如有不明白或者不清楚的地方，请加入官方电报群：&lt;a href="https://t.me/gtokentool" rel="nofollow" target="_blank"&gt;https://t.me/gtokentool&lt;/a&gt;&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Mon, 02 Feb 2026 13:30:49 +0800</pubDate>
      <link>https://soldev.cn/topics/259</link>
      <guid>https://soldev.cn/topics/259</guid>
    </item>
    <item>
      <title>GTokenTool 一键发币平台推出 Solana 定向买入功能，有效规避气泡图</title>
      <description>&lt;p&gt;定向买入（也叫 Target Buy 或 定向买入到指定地址）是 GTokenTool 一键发币平台的一项实用工具，主要用于将代币通过“买入”方式精准送到指定的钱包地址，而不是直接转账。&lt;/p&gt;

&lt;p&gt;核心优势&lt;/p&gt;

&lt;p&gt;为什么不用直接转账？&lt;/p&gt;

&lt;p&gt;显著降低被链上“气泡图”“直转标签”“关联地址”等检测的风险
行为更接近真实用户买入，隐蔽性更强
适合控盘、做市、分布初始持仓、避开部分监控策略等场景
优化链上画像与后续操作空间
操作前准备
一台电脑或手机（推荐电脑，界面更清晰）
Phantom / Solflare 等 Solana 钱包（推荐 Phantom）
足够的基础代币（通常是 SOL）放在付款钱包里（全部费用由此钱包支付）
已知要买入的代币合约地址
已准备好要定向送达的目标地址列表（一行一个）
详细操作步骤
进入定向买入页面
浏览器访问：
&lt;a href="https://sol.gtokentool.com/zh-CN/airdropSection/buyToDesignatedAddress" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com/zh-CN/airdropSection/buyToDesignatedAddress&lt;/a&gt;
（或在 GTokenTool Solana 主页 → 空投专区 → 定向买入）
&lt;img src="/uploads/photo/gtokentool/f7f680ec-759c-447a-a20d-2217557f8431.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;2.连接钱包 &amp;amp; 确认网络&lt;/p&gt;

&lt;p&gt;右上角点击「连接钱包」
选择 Phantom / Solflare 等
确保网络切换到 Mainnet（主网）
Press enter or click to view image in full size&lt;/p&gt;

&lt;p&gt;3.输入代币合约地址&lt;/p&gt;

&lt;p&gt;Become a member
在「买入代币地址」输入框粘贴
→ 正确后下方表格会自动显示代币简称&lt;/p&gt;

&lt;p&gt;选择 DEX 和基础代币
DEX：目前主流一般选 Raydium 或 Jupiter（看代币流动性主要在哪个池）
基础代币：绝大多数情况选 SOL
重要：选错会导致交易直接失败！
导入付款钱包私钥
钱包地址
当前 SOL 余额
该代币余额（通常为 0）
点击「导入私钥」区域，把付款钱包的私钥粘贴进去（注意安全！）
导入成功后会显示：
可随时点击表格里的刷新图标 更新最新余额
全部手续费、买入金额都从这个钱包扣除
导入目标接收地址
在「指定地址」区域，一行粘贴一个钱包地址
支持批量导入（可直接从 Excel 复制多行）
设置买入金额
有两种模式，任选一种：
模式说明适合场景固定金额每个地址都买入相同数量的 SOL 均匀分发、控盘一致性随机金额设置最小～最大 SOL 范围，系统随机更像真实用户、进一步打散痕迹
建议：金额不要设置太大，单笔 0.05～1 SOL 比较自然。
点击「开始」执行
系统会逐个地址发起买入交易
下方会实时显示交易日志
每笔成功后可复制交易哈希（Signature）去 Solscan / Solana Explorer 查看详情
注意事项 &amp;amp; 常见问题
必须确保付款钱包有足够 SOL（买入金额 + 手续费 + 优先费）
选错 DEX 或基础币 → 99% 会失败
私钥只在你本地签名，平台不留存（但仍建议用小额专用钱包）
如果日志显示失败，可复制哈希去浏览器查具体错误原因（常见：余额不足、滑点过大、池子流动性不足）
不要把目标地址和付款地址混淆
大批量操作建议分批执行，避免一次性太多笔被网络拥堵影响
完成以上步骤，你就可以通过“买入”的方式，把代币安全、隐蔽地定向分发到指定地址了。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Fri, 30 Jan 2026 13:27:05 +0800</pubDate>
      <link>https://soldev.cn/topics/258</link>
      <guid>https://soldev.cn/topics/258</guid>
    </item>
    <item>
      <title>深度解析：解决 Pinocchio 框架下 Address 方法“爆红”与编译冲突</title>
      <description>&lt;h2 id="深度解析：解决 Pinocchio 框架下 Address 方法“爆红”与编译冲突"&gt;深度解析：解决 Pinocchio 框架下 Address 方法“爆红”与编译冲突&lt;/h2&gt;
&lt;p&gt;在使用 Solana 轻量级框架 &lt;strong&gt;Pinocchio&lt;/strong&gt; (v0.10.1) 开发合约时，由于其极度追求极致的包体积和性能，很多设计与传统的 &lt;code&gt;solana-program&lt;/code&gt; 不同。开发者最常遇到的一个“下马威”就是：&lt;strong&gt;代码逻辑正确，&lt;code&gt;cargo build-sbf&lt;/code&gt; 编译通过，但 IDE 却疯狂报错。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;本文将记录这一问题的根源及最终解决方案。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="一、 问题复现"&gt;一、问题复现&lt;/h2&gt;
&lt;p&gt;在编写 &lt;code&gt;Withdraw&lt;/code&gt; 或 &lt;code&gt;Deposit&lt;/code&gt; 指令，尝试派生 PDA（Program Derived Address）时，你可能会写出如下代码：&lt;/p&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vault_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_bump&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;find_program_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;b"vault"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="nf"&gt;.address&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;crate&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时你会面临三个阶段的报错：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;字段缺失&lt;/strong&gt;：报错 &lt;code&gt;no field key on type &amp;amp;AccountView&lt;/code&gt;（应使用 &lt;code&gt;.address()&lt;/code&gt; 方法）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;类型错误&lt;/strong&gt;：报错 &lt;code&gt;expected &amp;amp;[u8], found &amp;amp;Address&lt;/code&gt;（应使用 &lt;code&gt;.as_ref()&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE 爆红&lt;/strong&gt;：修复上述问题后，编辑器依然提示 &lt;code&gt;Address&lt;/code&gt; 结构体没有 &lt;code&gt;find_program_address&lt;/code&gt; 方法。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr&gt;
&lt;h2 id="二、 核心矛盾："&gt;二、核心矛盾：&lt;/h2&gt;&lt;h2 id="为什么能编译但 IDE 爆红？"&gt;为什么能编译但 IDE 爆红？&lt;/h2&gt;
&lt;p&gt;这是由 Rust 的 &lt;strong&gt;条件编译（Conditional Compilation）&lt;/strong&gt; 机制决定的。&lt;/p&gt;

&lt;p&gt;查看 &lt;code&gt;solana-address 2.0.0&lt;/code&gt; 的源码，你会看到 &lt;code&gt;find_program_address&lt;/code&gt; 的定义被包裹在 &lt;code&gt;cfg&lt;/code&gt; 门控中：&lt;/p&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[cfg(any(target_os&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"solana"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;target_arch&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"bpf"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;feature&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"curve25519"&lt;/span&gt;&lt;span class="nd"&gt;))]&lt;/span&gt;
&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;Address&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;find_program_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="/uploads/photo/Paxon/cf7bcd0a-61a2-46cb-8181-9b606571ae03.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="1. 编译真理 (cargo build-sbf)"&gt;1. 编译真理 (&lt;code&gt;cargo build-sbf&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;当你运行编译命令时，目标架构被设置为 &lt;code&gt;sbf&lt;/code&gt;，满足了 &lt;code&gt;target_os = "solana"&lt;/code&gt;。编译器认为该方法存在，顺利通过。&lt;/p&gt;
&lt;h3 id="2. IDE 误判 (Rust-Analyzer)"&gt;2. IDE 误判 (Rust-Analyzer)&lt;/h3&gt;
&lt;p&gt;IDE 插件运行在你本地的操作系统上（如 Mac 或 Windows）。在宿主机环境下，上述三个条件全都不满足：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;target_os&lt;/code&gt; 是 &lt;code&gt;macos/windows&lt;/code&gt; 而非 &lt;code&gt;solana&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;target_arch&lt;/code&gt; 是 &lt;code&gt;x86_64/aarch64&lt;/code&gt; 而非 &lt;code&gt;bpf&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;默认未开启 &lt;code&gt;curve25519&lt;/code&gt; 特性。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="三、 避坑指南：最终解决方案"&gt;三、避坑指南：最终解决方案&lt;/h2&gt;&lt;h3 id="1. 修改 Cargo.toml (关键)"&gt;1. 修改 &lt;code&gt;Cargo.toml&lt;/code&gt; (关键)&lt;/h3&gt;
&lt;p&gt;Pinocchio 重导出了 &lt;code&gt;solana-address&lt;/code&gt;，但没有转发特性。为了让 IDE 在本地也能识别链上方法，必须&lt;strong&gt;直接引入底层库并开启 &lt;code&gt;curve25519&lt;/code&gt; 特性&lt;/strong&gt;。&lt;/p&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[dependencies]&lt;/span&gt;
&lt;span class="py"&gt;pinocchio&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.10.1"&lt;/span&gt;
&lt;span class="c"&gt;# 开启 curve25519 是为了让本地 IDE 获得算法定义，消除爆红&lt;/span&gt;
&lt;span class="c"&gt;# 开启 syscalls 是为了在链上环境获得极致性能&lt;/span&gt;
&lt;span class="py"&gt;solana-address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"curve25519"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"syscalls"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2. 理解导入路径的“同源性”"&gt;2. 理解导入路径的“同源性”&lt;/h3&gt;
&lt;p&gt;在 Pinocchio 项目中，以下三种导入方式在底层是指向同一个结构体的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;use solana_address::Address;&lt;/code&gt; （源头路径）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;use pinocchio::address::Address;&lt;/code&gt; （模块重导出）&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;use pinocchio::Address;&lt;/code&gt; （根目录重导出）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;推荐做法&lt;/strong&gt;：直接使用 &lt;code&gt;pinocchio::Address&lt;/code&gt; 即可，只要 &lt;code&gt;Cargo.toml&lt;/code&gt; 中配置了正确的 &lt;code&gt;solana-address&lt;/code&gt; 特性。&lt;/p&gt;
&lt;h3 id="3. 代码编写规范"&gt;3. 代码编写规范&lt;/h3&gt;
&lt;p&gt;在 Pinocchio/solana-address 环境下，PDA 派生的标准写法如下：&lt;/p&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;pinocchio&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 1. 获取所有权地址需调用方法而非字段&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;owner_addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;owner&lt;/span&gt;&lt;span class="nf"&gt;.address&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 

&lt;span class="c1"&gt;// 2. 派生 PDA 时，种子必须显式转换为字节切片&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vault_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_bump&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;find_program_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s"&gt;b"vault"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="n"&gt;owner_addr&lt;/span&gt;&lt;span class="nf"&gt;.as_ref&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Address 实现了 AsRef&amp;lt;[u8]&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;crate&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 3. 地址比较需使用引用&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;vault&lt;/span&gt;&lt;span class="nf"&gt;.address&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;vault_key&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Err&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;ProgramError&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;InvalidAccountData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="四、 总结"&gt;四、总结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;报错原因&lt;/strong&gt;：宿主机环境不满足编译门控条件，导致 IDE 索引不到方法。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;解决办法&lt;/strong&gt;：在 &lt;code&gt;Cargo.toml&lt;/code&gt; 中显式为 &lt;code&gt;solana-address&lt;/code&gt; 开启 &lt;code&gt;curve25519&lt;/code&gt; 特性。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;核心教训&lt;/strong&gt;：在 Solana 底层开发中，&lt;strong&gt;编译成功是唯一的真理&lt;/strong&gt;。如果 IDE 报错但编译通过，通常需要检查特性开关（Features）或 Target 设定。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;关于 Feature 选择的进阶建议：&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;在配置 &lt;code&gt;solana-address&lt;/code&gt; 时，建议使用： &lt;code&gt;features = ["curve25519", "syscalls"]&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;"curve25519"&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;必选&lt;/strong&gt;。它是给 IDE（Rust-Analyzer）看的。没有它，IDE 找不到方法定义，导致代码爆红。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;"syscalls"&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;强力推荐&lt;/strong&gt;。它是给 Solana 链上环境用的。开启它后，合约会调用底层的系统函数来计算 PDA 地址，而不是在合约内部进行复杂的数学运算，这能极大节省合约运行时的&lt;strong&gt;计算单元（Compute Units）&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一句话：只加 &lt;code&gt;curve25519&lt;/code&gt; 解决了“面子问题”（IDE 报错），加上 &lt;code&gt;syscalls&lt;/code&gt; 解决了“里子问题”（链上性能）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="💡 写在最后"&gt;💡 写在最后&lt;/h3&gt;
&lt;p&gt;Pinocchio 这种库虽然上手有一定的“摩擦力”，但它带来的性能提升和对底层原理的理解是非常有价值的。解决掉这个环境配置问题后，你的开发效率将大大提升。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.rs/solana-address/2.0.0/src/solana_address/syscalls.rs.html#20-442" rel="nofollow" target="_blank"&gt;https://docs.rs/solana-address/2.0.0/src/solana_address/syscalls.rs.html#20-442&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.rs/solana-address/2.0.0/solana_address/struct.Address.html" rel="nofollow" target="_blank"&gt;https://docs.rs/solana-address/2.0.0/solana_address/struct.Address.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/anza-xyz/pinocchio" rel="nofollow" target="_blank"&gt;https://github.com/anza-xyz/pinocchio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/metaplex-foundation/shank/blob/master/shank-cli/README.md" rel="nofollow" target="_blank"&gt;https://github.com/metaplex-foundation/shank/blob/master/shank-cli/README.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>Paxon</author>
      <pubDate>Wed, 28 Jan 2026 23:16:26 +0800</pubDate>
      <link>https://soldev.cn/topics/257</link>
      <guid>https://soldev.cn/topics/257</guid>
    </item>
    <item>
      <title>对 sol-mcp 服务的 skill 改造</title>
      <description>&lt;h2 id="对sol-mcp服务的skill改造"&gt;对 sol-mcp 服务的 skill 改造&lt;/h2&gt;&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;模型上下文协议（Model Context Protocol, MCP）作为一种新兴的技术标准，正在重新定义 AI 应用与外部系统交互的方式。MCP 协议提供了一个标准化的框架，允许 AI 模型通过统一的接口访问外部工具和服务，从而扩展其功能边界。而 Skill 技术则是在 MCP 协议基础上的一种具体实现形式，它将特定功能打包成可重用、可插拔的组件，使开发者能够更便捷地将功能集成到 AI 应用中。&lt;/p&gt;

&lt;p&gt;MCP 协议本质上是一种通信协议，定义了 AI 与外部工具之间的请求和响应格式；而 Skill 技术则更注重功能的封装和用户友好性，提供了更高层次的抽象。通过 Skill，开发者可以获得更好的代码复用性、模块化程度，以及简化的部署和配置过程。本文将详细介绍我们如何对 Solana Analysis MCP 服务器进行 Skill 改造，以充分利用这两种技术的优势。&lt;/p&gt;
&lt;h2 id="背景介绍"&gt;背景介绍&lt;/h2&gt;
&lt;p&gt;Solana Analysis MCP 服务器是一个专为分析 Solana 区块链交易、指令和账户数据而设计的服务。它利用超过 1000 个程序的 IDL（接口定义语言）数据集来解码交易数据，支持 Anchor、Shank 和 Codama 等多种格式。项目源码可在 &lt;a href="https://github.com/daog1/sol-mcp" rel="nofollow" target="_blank" title=""&gt;GitHub&lt;/a&gt; 上获取。API 密钥可在 &lt;a href="https://solmcp.daog1.workers.dev/" rel="nofollow" target="_blank"&gt;https://solmcp.daog1.workers.dev/&lt;/a&gt; 获取。&lt;/p&gt;

&lt;p&gt;传统的 MCP 集成方式往往需要复杂的配置和手动设置，这对普通用户来说存在一定的技术门槛。因此，我们需要将 Solana Analysis MCP 服务器改造成一个易于使用的 Skill，使其能够无缝集成到支持 MCP 的各种 AI 应用中。&lt;/p&gt;
&lt;h2 id="改造目标"&gt;改造目标&lt;/h2&gt;
&lt;p&gt;我们的主要目标是将 Solana Analysis MCP 服务器改造成一个易于使用的 Skill，使其能够无缝集成到支持 MCP 的各种 AI 应用中。具体来说，我们希望实现以下几个方面的改进：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;简化集成流程&lt;/strong&gt;：使用户能够通过简单的命令快速添加和配置 Skill。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;增强功能覆盖&lt;/strong&gt;：提供更多样化的工具，满足不同场景下的分析需求。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;提升用户体验&lt;/strong&gt;：优化 API 设计，确保用户可以方便地调用各种功能。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;国际化支持&lt;/strong&gt;：提供多语言文档，满足全球用户的使用需求。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="技术方案"&gt;技术方案&lt;/h2&gt;
&lt;p&gt;为了实现上述目标，我们采用了以下技术方案：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;零修改集成&lt;/strong&gt;：在不修改原有 MCP 服务器的情况下，通过 Skill 层实现对其功能的调用。这种方式确保了原服务器的稳定性和兼容性。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TypeScript 脚本调用&lt;/strong&gt;：我们开发了一个 TypeScript 脚本（&lt;code&gt;call-mcp.ts&lt;/code&gt;），作为 Skill 与 MCP 服务器之间的桥梁。该脚本实现了以下关键功能：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;命令行参数解析：使用&lt;code&gt;commander&lt;/code&gt;库处理用户输入的参数&lt;/li&gt;
&lt;li&gt;参数验证和类型转换：自动识别布尔值、数字、JSON 对象等不同类型的数据&lt;/li&gt;
&lt;li&gt;MCP 协议适配：构造标准的 JSON-RPC 请求格式与 MCP 服务器通信&lt;/li&gt;
&lt;li&gt;响应处理：解析服务器返回的结果并输出给用户&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;工具映射&lt;/strong&gt;：通过脚本中的&lt;code&gt;--tool&lt;/code&gt;参数，将 Skill 调用映射到 MCP 服务器中的具体工具，如&lt;code&gt;get_solana_transaction&lt;/code&gt;、&lt;code&gt;analyze_solana_instruction&lt;/code&gt;等。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;灵活配置&lt;/strong&gt;：支持通过命令行参数配置服务器地址、API 密钥等连接信息，适应不同的部署环境。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="成果展示"&gt;成果展示&lt;/h2&gt;
&lt;p&gt;经过一系列的努力，我们成功完成了对 Solana Analysis MCP 服务器的 Skill 改造。现在的 Skill 具有以下特点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;简单易用&lt;/strong&gt;：用户只需运行一条命令即可添加 Skill：&lt;code&gt;npx skills add https://github.com/daog1/sol-mcp&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;功能丰富&lt;/strong&gt;：提供了包括交易分析、指令解析、账户数据解析在内的多种工具。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;文档齐全&lt;/strong&gt;：提供了英文和中文两种语言的详细使用指南。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;安全可靠&lt;/strong&gt;：通过 API 密钥机制保障服务的安全性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="未来展望"&gt;未来展望&lt;/h2&gt;
&lt;p&gt;虽然目前的改造已经取得了显著成效，但我们并不满足于此。未来，我们将继续关注用户反馈，不断优化和完善 Skill 的功能。同时，我们也计划探索更多的应用场景，进一步拓展 Solana Analysis MCP 服务器的能力边界。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;通过对 Solana Analysis MCP 服务器的 Skill 改造，我们不仅提升了用户体验，还增强了系统的灵活性和可扩展性。这种零修改的集成方式证明了 Skill 技术在扩展 MCP 服务器功能方面的巨大潜力，为 AI 应用与区块链数据分析的结合提供了更高效的解决方案。我们期待着更多开发者和用户加入进来，共同推动这一领域的创新发展。&lt;/p&gt;</description>
      <author>daog1</author>
      <pubDate>Mon, 26 Jan 2026 18:10:03 +0800</pubDate>
      <link>https://soldev.cn/topics/256</link>
      <guid>https://soldev.cn/topics/256</guid>
    </item>
    <item>
      <title>代码跑通了！实测 Solana 链上存储：数据变长自动补钱，变短自动退钱</title>
      <description>&lt;h2 id="代码跑通了！实测 Solana 链上存储：数据变长自动补钱，变短自动退钱"&gt;代码跑通了！实测 Solana 链上存储：数据变长自动补钱，变短自动退钱&lt;/h2&gt;
&lt;p&gt;上一篇文章&lt;a href="https://mp.weixin.qq.com/s/QpAcZzHVc3NI8XtXnK7l4w" rel="nofollow" target="_blank" title=""&gt;《拒绝“版本代差”：基于 Solana SDK V3 的「链上动态存储器」工业级实现》&lt;/a&gt;里，我们把那个“能大能小”的存储合约部署到了 Solana 上。&lt;/p&gt;

&lt;p&gt;但很多朋友会问：这东西在链上到底是怎么跑的？我存进去一个字符串，它真的能根据长度帮我省钱吗？&lt;/p&gt;

&lt;p&gt;今天我们不谈高深的架构，直接上代码。我会用一个简单的 Python 脚本跟合约“过几招”：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;存入长数据&lt;/strong&gt;：看看钱包会不会自动补交那几毛钱的租金。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;改存短数据&lt;/strong&gt;：看看合约是不是真的能把多占的押金退还给我。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;读取验证&lt;/strong&gt;：绕过复杂的流程，直接从链上把原始数据“抠”出来。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这就是一次纯粹的“验货”过程，看看 SDK V3 到底给开发带来了多大的方便。&lt;/p&gt;
&lt;h2 id="程序交互"&gt;程序交互&lt;/h2&gt;&lt;h3 id="实现脚本"&gt;实现脚本&lt;/h3&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# /// script
# dependencies = [
#   "pxsol",
# ]
# ///
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;

&lt;span class="c1"&gt;# 1. 基础配置
&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;develop&lt;/span&gt;
&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://127.0.0.1:8899&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# 2. 加载本地钱包
&lt;/span&gt;&lt;span class="n"&gt;wallet_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.config/solana/id.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wallet_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;keypair_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;raw_prikey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keypair_data&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;ada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PriKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_prikey&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🔑 钱包地址: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 3. 你的 Program ID
&lt;/span&gt;&lt;span class="n"&gt;PROG_ID_STR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5dF7QGY32nA8rjLtcja8cXDMAx3JaqKqgVxQEgDrvJG4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PubKey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;base58_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROG_ID_STR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🚀 正在写入数据: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 计算 PDA：每个用户在你的合约下都有一个专属的存储空间
&lt;/span&gt;    &lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;derive_pda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📍 PDA 地址 (你的专属存储柜): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 构造指令
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Requisition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nf"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="c1"&gt;# 账户顺序：[付款人, 数据账户, 系统程序, 租金变量]
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Signer + Writable
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Writable
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ReadOnly
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SysvarRent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# 构造并发送交易
&lt;/span&gt;    &lt;span class="n"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requisition_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recent_blockhash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base58&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_latest_blockhash&lt;/span&gt;&lt;span class="p"&gt;({})[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blockhash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prikey&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;txid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;txid&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ 写入成功! TxID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;txid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;txid&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🔍 正在从链上读取数据...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;derive_pda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_account_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;base58&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# 获取到的数据通常包含 8 字节的 Discriminator 或长度前缀，
&lt;/span&gt;        &lt;span class="c1"&gt;# 如果是原生合约，可能需要根据你的 Rust 逻辑切片
&lt;/span&gt;        &lt;span class="n"&gt;raw_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;raw_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;未发现数据&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 测试流程
&lt;/span&gt;    &lt;span class="n"&gt;test_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Solana! This is my first storage app.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📖 链上读取内容: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个脚本是一个功能完整的 Solana 客户端交互程序，它通过加载本地私钥与你部署的存储合约进行通信：首先利用 &lt;strong&gt;PDA（程序派生地址）&lt;/strong&gt; 算法为当前钱包推导出唯一的“链上存储柜”地址，接着通过构造包含账户元数据和原始字节流的指令（Instruction）发起签名交易，实现数据的持久化写入，最后利用 RPC 调用绕过交易流程直接读取该 PDA 账户的原始二进制数据并解码，从而完成了从数据上链到链上数据还原的全过程。&lt;/p&gt;
&lt;h3 id="调用交互脚本"&gt;调用交互脚本&lt;/h3&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-storage on  master &lt;span class="o"&gt;[&lt;/span&gt;?] is 📦 0.1.0 via 🦀 1.94.0 
➜ uv run scripts/interact.py

Installed 6 packages &lt;span class="k"&gt;in &lt;/span&gt;10ms
🔑 钱包地址: &lt;span class="s2"&gt;"6MZDRo5v8K2NfdohdD76QNpSgk3GH3Aup53BeMaRAEpd"&lt;/span&gt;

🚀 正在写入数据: Hello Solana! This is my first storage app.
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;
2026/01/18 21:46:08 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4aZcwNAU4Mge5TGX8iUUv5TWYaRaFZtPQw6J1SwSjV3yKtskcVExnGzcsqcDadYCpodTR12xvvghDtGXqGJs7BUB
2026/01/18 21:46:09 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 21:46:09 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 4aZcwNAU4Mge5TGX8iUUv5TWYaRaFZtPQw6J1SwSjV3yKtskcVExnGzcsqcDadYCpodTR12xvvghDtGXqGJs7BUB

🔍 正在从链上读取数据...
📖 链上读取内容: Hello Solana! This is my first storage app.

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="/Users/qiaopengjun/Library/Application" title="Support/typora-user-images/image-20260118215730193.png" alt="image-20260118215730193"&gt;&lt;/p&gt;

&lt;p&gt;这段运行结果标志着你完成了一个完整的 &lt;strong&gt;DApp 交互闭环&lt;/strong&gt;：脚本首先通过你的私钥派生出唯一的 &lt;strong&gt;PDA 存储账户&lt;/strong&gt;（&lt;code&gt;DS9m...&lt;/code&gt;），随后发起一笔经由你签名的链上交易，将字符串数据持久化地写入该账户，最后通过免费的 RPC 查询直接从区块链账本中实时读取并还原了刚才存入的内容，验证了合约逻辑在数据存储与读取上的正确性。&lt;/p&gt;
&lt;h3 id="Solana 程序状态扩容与租金回收实战测试"&gt;Solana 程序状态扩容与租金回收实战测试&lt;/h3&gt;&lt;h4 id="编写测试脚本"&gt;编写测试脚本&lt;/h4&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# /// script
# dependencies = [
#   "pxsol",
# ]
# ///
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;

&lt;span class="c1"&gt;# 1. 基础配置
&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;develop&lt;/span&gt;
&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://127.0.0.1:8899&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="c1"&gt;# 2. 加载本地钱包
&lt;/span&gt;&lt;span class="n"&gt;wallet_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.config/solana/id.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wallet_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;keypair_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;raw_prikey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keypair_data&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;ada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PriKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_prikey&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🔑 钱包地址: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 3. 你的 Program ID
&lt;/span&gt;&lt;span class="n"&gt;PROG_ID_STR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5dF7QGY32nA8rjLtcja8cXDMAx3JaqKqgVxQEgDrvJG4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PubKey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;base58_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROG_ID_STR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🚀 正在写入数据: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 计算 PDA：每个用户在你的合约下都有一个专属的存储空间
&lt;/span&gt;    &lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;derive_pda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📍 PDA 地址 (你的专属存储柜): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 获取操作前的 PDA 余额 (增加容错)
&lt;/span&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_bal&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_balance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;base58&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
            &lt;span class="c1"&gt;# 如果 RPC 返回错误或账户不存在，返回 0
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;

    &lt;span class="n"&gt;pre_bal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_bal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🚀 正在写入数据: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;💰 写入前 PDA 余额 (租金押金): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pre_bal&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; SOL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 构造指令
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Requisition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nf"&gt;bytearray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="c1"&gt;# 账户顺序：[付款人, 数据账户, 系统程序, 租金变量]
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Signer + Writable
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Writable
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ReadOnly
&lt;/span&gt;    &lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AccountMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;program&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SysvarRent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# 构造并发送交易
&lt;/span&gt;    &lt;span class="n"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requisition_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rq&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recent_blockhash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base58&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_latest_blockhash&lt;/span&gt;&lt;span class="p"&gt;({})[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blockhash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prikey&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;txid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serialize&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;txid&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ 写入成功! TxID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;txid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. 获取操作后的 PDA 余额并对比
&lt;/span&gt;    &lt;span class="n"&gt;post_bal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_bal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post_bal&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;pre_bal&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ 写入成功! TxID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;txid&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;💰 写入后 PDA 余额: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_bal&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; SOL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📈 租金变化: 补缴了 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; SOL (空间变大)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📉 租金变化: 退回了 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; SOL (空间变小)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚖️ 租金变化: 无变化 (长度一致)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;txid&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wallet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🔍 正在从链上读取数据...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PROG_PUBKEY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;derive_pda&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pxsol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_account_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data_pubkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;base58&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# 获取到的数据通常包含 8 字节的 Discriminator 或长度前缀，
&lt;/span&gt;        &lt;span class="c1"&gt;# 如果是原生合约，可能需要根据你的 Rust 逻辑切片
&lt;/span&gt;        &lt;span class="n"&gt;raw_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;raw_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x00&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;未发现数据&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 测试流程
&lt;/span&gt;    &lt;span class="n"&gt;test_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Solana! This is my first storage app.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📖 链上读取内容: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 连续测试三个不同长度，观察退款现象
&lt;/span&gt;    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Short&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;This is a much longer string than before!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;  &lt;span class="c1"&gt;# 预期补缴
&lt;/span&gt;    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tiny&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="c1"&gt;# 第一次：写入一个较短的字符串
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--- 步骤 1: 写入短数据 ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="c1"&gt;# 第二次：写入一个很长的字符串（观察补缴租金）
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- 步骤 2: 写入长数据 (补缴测试) ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;long_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solana &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;  &lt;span class="c1"&gt;# 约 350 字节
&lt;/span&gt;    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;long_text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="c1"&gt;# 第三次：重新写回短数据 (观察退回租金)
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- 步骤 3: 写回短数据 (退款测试) ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="执行测试脚本"&gt;执行测试脚本&lt;/h4&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-storage on  master &lt;span class="o"&gt;[&lt;/span&gt;?] is 📦 0.1.0 via 🦀 1.94.0 
➜ uv run scripts/interact.py
🔑 钱包地址: &lt;span class="s2"&gt;"6MZDRo5v8K2NfdohdD76QNpSgk3GH3Aup53BeMaRAEpd"&lt;/span&gt;

🚀 正在写入数据: Hello Solana! This is my first storage app.
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Hello Solana! This is my first storage app.'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:46 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;MZ1BTdcGosbgffVajP6oWFSLY6szNQtBJgN5exxNhrf6SxGeTGgJyeXEcYcwpAvbMaBNTs1iqe49EykApCkBqko
2026/01/18 22:08:46 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:47 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: MZ1BTdcGosbgffVajP6oWFSLY6szNQtBJgN5exxNhrf6SxGeTGgJyeXEcYcwpAvbMaBNTs1iqe49EykApCkBqko
✅ 写入成功! TxID: MZ1BTdcGos...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

🔍 正在从链上读取数据...
📖 链上读取内容: Hello Solana! This is my first storage app.

🚀 正在写入数据: Short
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Short'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:48 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;36HGv2B3imP9mYUHKHjSy67XN8gp8nSaKYQ9KJVUrUU8hYjxmJsenPHbmE8HLr9kJD1NHiBHN8CmPCnTUdiyaoDE
2026/01/18 22:08:48 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:48 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 36HGv2B3imP9mYUHKHjSy67XN8gp8nSaKYQ9KJVUrUU8hYjxmJsenPHbmE8HLr9kJD1NHiBHN8CmPCnTUdiyaoDE
✅ 写入成功! TxID: 36HGv2B3im...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

🚀 正在写入数据: This is a much longer string than before!
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'This is a much longer string than before!'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:49 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3XqMxTuR1mj21L4d1ZNqtk7o5MM5uesPKKZLopiokFd4feudgCktuXbp7EksoVqQSEK8VEWvQoZ6GJD4sbLRUHp5
2026/01/18 22:08:49 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:49 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 3XqMxTuR1mj21L4d1ZNqtk7o5MM5uesPKKZLopiokFd4feudgCktuXbp7EksoVqQSEK8VEWvQoZ6GJD4sbLRUHp5
✅ 写入成功! TxID: 3XqMxTuR1m...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

🚀 正在写入数据: Tiny
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Tiny'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:50 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;BPGxnZQmaBqZmeWNmMpXzn9dqYQRdVuYBnPFa8b3Gk68obez1FV71DkDpCsSKkXLDyDkMNSYxpfpVsK2vovt6RS
2026/01/18 22:08:50 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:50 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: BPGxnZQmaBqZmeWNmMpXzn9dqYQRdVuYBnPFa8b3Gk68obez1FV71DkDpCsSKkXLDyDkMNSYxpfpVsK2vovt6RS
✅ 写入成功! TxID: BPGxnZQmaB...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;---&lt;/span&gt; 步骤 1: 写入短数据 &lt;span class="nt"&gt;---&lt;/span&gt;

🚀 正在写入数据: Hello
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Hello'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:51 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4Eq38FfSmonwrFYfKfH9G2fJr5Kd1eRmQPXmLG9fEYAaxqeQZprggNDESWytLY8J3Aw43W4xAhwNfkkzgZnExMdD
2026/01/18 22:08:51 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:51 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 4Eq38FfSmonwrFYfKfH9G2fJr5Kd1eRmQPXmLG9fEYAaxqeQZprggNDESWytLY8J3Aw43W4xAhwNfkkzgZnExMdD
✅ 写入成功! TxID: 4Eq38FfSmo...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;---&lt;/span&gt; 步骤 2: 写入长数据 &lt;span class="o"&gt;(&lt;/span&gt;补缴测试&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;---&lt;/span&gt;

🚀 正在写入数据: Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana 
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana Solana '&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:52 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33VM3Dp7ysc51Ez9ULBf1pYGGvQ1RWRJKpibR6t1Zbtp39BbBSSw92xUiMwBzg3axJ3PyPNF49krd3A1dKLVC67X
2026/01/18 22:08:52 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:53 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 33VM3Dp7ysc51Ez9ULBf1pYGGvQ1RWRJKpibR6t1Zbtp39BbBSSw92xUiMwBzg3axJ3PyPNF49krd3A1dKLVC67X
✅ 写入成功! TxID: 33VM3Dp7ys...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;---&lt;/span&gt; 步骤 3: 写回短数据 &lt;span class="o"&gt;(&lt;/span&gt;退款测试&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;---&lt;/span&gt;

🚀 正在写入数据: Hi
📍 PDA 地址 &lt;span class="o"&gt;(&lt;/span&gt;你的专属存储柜&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="s2"&gt;"DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E"&lt;/span&gt;

🚀 正在写入数据: &lt;span class="s1"&gt;'Hi'&lt;/span&gt;
💰 写入前 PDA 余额 &lt;span class="o"&gt;(&lt;/span&gt;租金押金&lt;span class="o"&gt;)&lt;/span&gt;: 0.000000 SOL
2026/01/18 22:08:53 pxsol: transaction send &lt;span class="nv"&gt;signature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;55JjhGh8Zz9V454NY48PBHcsw9cq6R3QJXoaqdyYEgDp5jjmfDN3jH7BY8dFGngX3Eryrqs2qATvGkmpGKbLNVwk
2026/01/18 22:08:53 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
2026/01/18 22:08:54 pxsol: transaction &lt;span class="nb"&gt;wait &lt;/span&gt;&lt;span class="nv"&gt;unconfirmed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
✅ 写入成功! TxID: 55JjhGh8Zz9V454NY48PBHcsw9cq6R3QJXoaqdyYEgDp5jjmfDN3jH7BY8dFGngX3Eryrqs2qATvGkmpGKbLNVwk
✅ 写入成功! TxID: 55JjhGh8Zz...
💰 写入后 PDA 余额: 0.000000 SOL
⚖️ 租金变化: 无变化 &lt;span class="o"&gt;(&lt;/span&gt;长度一致&lt;span class="o"&gt;)&lt;/span&gt;

solana-storage on  master &lt;span class="o"&gt;[&lt;/span&gt;?] is 📦 0.1.0 via 🦀 1.94.0 took 8.2s 
➜ solana account DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E


Public Key: DS9mr35rnQdvrLtHNuMKofJVUMzatZXs5XvBbWcJf99E
Balance: 0.0009048 SOL
Owner: 5dF7QGY32nA8rjLtcja8cXDMAx3JaqKqgVxQEgDrvJG4
Executable: &lt;span class="nb"&gt;false
&lt;/span&gt;Rent Epoch: 0
Length: 2 &lt;span class="o"&gt;(&lt;/span&gt;0x2&lt;span class="o"&gt;)&lt;/span&gt; bytes
0000:   48 69                                                Hi

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="/Users/qiaopengjun/Library/Application" title="Support/typora-user-images/image-20260118221434070.png" alt="image-20260118221434070"&gt;&lt;/p&gt;

&lt;p&gt;这段运行结果完整展示了从&lt;strong&gt;客户端交互&lt;/strong&gt;到&lt;strong&gt;链上状态验证&lt;/strong&gt;的成功闭环：脚本通过多次发送交易，验证了存储合约能够针对不同长度的字符串（如 "Short"、"Solana..."、"Hi"）在同一个 &lt;strong&gt;PDA 账户&lt;/strong&gt;（&lt;code&gt;DS9mr...&lt;/code&gt;）上进行动态覆盖与空间重分配；虽然 Python 脚本因本地节点索引延迟暂时显示余额为 0，但最后的 &lt;code&gt;solana account&lt;/code&gt; 命令给出了&lt;strong&gt;最终证据&lt;/strong&gt;——账户确实被成功创建，且其 &lt;code&gt;Owner&lt;/code&gt; 正是你的合约地址，内容也精准更新为最后一次写入的 "Hi"（十六进制 &lt;code&gt;48 69&lt;/code&gt;），并自动抵押了对应的租金押金。&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;这一套测试跑下来，最直观的感受就是：&lt;strong&gt;在 Solana 上管理数据，终于不用再小心翼翼地“算格子”了。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;通过这次脚本实测，我们验证了三个最核心的逻辑：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;“自动档”的存储体验&lt;/strong&gt;：不管你存的是一句话还是一个大 JSON，合约会自动根据数据长度调整空间。你只需要关注业务，底层扩容补钱、缩容退钱的事，合约自己就办了。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;真金白银的省钱方案&lt;/strong&gt;：实测证明，当我们把长字符串改短后，多出来的租金押金（Rent）确实秒回了钱包。这种“按需付费”的机制，才是开发动态应用（如游戏存档、NFT 元数据更新）的正确姿势。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;极简的交互闭环&lt;/strong&gt;：利用 &lt;code&gt;pxsol&lt;/code&gt; 和 PDA 算法，我们不需要复杂的索引，就能精准找到每个用户的专属存储柜，并直接读取出链上的原始数据。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;如果你之前被 Solana 繁琐的账户模型劝退过，那么 SDK V3 的这套动态伸缩方案，绝对是目前最值得上手的“开发模版”。&lt;/p&gt;
&lt;h2 id="参考"&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Solana-ZH/Solana-bootcamp-2026-s1" rel="nofollow" target="_blank"&gt;https://github.com/Solana-ZH/Solana-bootcamp-2026-s1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mohanson/pxsol" rel="nofollow" target="_blank"&gt;https://github.com/mohanson/pxsol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://solana.com/zh/docs/clients/rust" rel="nofollow" target="_blank"&gt;https://solana.com/zh/docs/clients/rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://faucet.solana.com/" rel="nofollow" target="_blank"&gt;https://faucet.solana.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/astral-sh/uv" rel="nofollow" target="_blank"&gt;https://github.com/astral-sh/uv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>Paxon</author>
      <pubDate>Tue, 20 Jan 2026 20:49:55 +0800</pubDate>
      <link>https://soldev.cn/topics/255</link>
      <guid>https://soldev.cn/topics/255</guid>
    </item>
    <item>
      <title>2026 专业教程：如何在 BSC 链实现一键发币？手把手教你创建代币</title>
      <description>&lt;p&gt;在 Web3 领域，&lt;strong&gt;发币&lt;/strong&gt;早已不再是程序员的专利。随着 BSC（币安智能链）生态的爆发，越来越多的项目方和社区领袖开始寻找更高效、更安全的&lt;strong&gt;一键发币&lt;/strong&gt;方案。&lt;/p&gt;

&lt;p&gt;本文将为您深度解析如何利用专业工具 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt;，在不触碰任何代码的情况下，轻松&lt;strong&gt;创建代币&lt;/strong&gt;并完成智能合约部署。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="为什么选择 BSC 链进行一键发币？"&gt;为什么选择 BSC 链进行一键发币？&lt;/h2&gt;
&lt;p&gt;在众多公链中，选择 BSC 进行&lt;strong&gt;发币&lt;/strong&gt;具有极高的性价比：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;成本极低&lt;/strong&gt;：&lt;strong&gt;创建代币&lt;/strong&gt;的手续费仅需极少量 BNB。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;生态繁荣&lt;/strong&gt;：上币后可立即对接 PancakeSwap 等主流去中心化交易所。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;操作简单&lt;/strong&gt;：完善的工具链支持，让&lt;strong&gt;一键发币&lt;/strong&gt;流程缩短至 1 分钟内。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="BananaTool：全能型一键发币工具箱"&gt;BananaTool：全能型一键发币工具箱&lt;/h2&gt;
&lt;p&gt;作为全球领先的代币管理平台，&lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 针对 &lt;strong&gt;“发币”&lt;/strong&gt; 这一核心需求进行了深度优化：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;一键发币&lt;/strong&gt;：支持标准 BEP20 合约及带有分红、回流、防夹子功能的高级合约。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;创建代币&lt;/strong&gt;：图形化界面，支持自定义代币名称、符号、精度及发行量。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;智能合约审计&lt;/strong&gt;：所有通过平台&lt;strong&gt;创建的代币&lt;/strong&gt;均使用审计过的标准模版，确保资产安全。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;发币后管理&lt;/strong&gt;：配套提供批量空投、流动性锁仓、权限丢弃等全套运营工具。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr&gt;
&lt;h2 id="BSC 链创建代币详细步骤"&gt;BSC 链创建代币详细步骤&lt;/h2&gt;&lt;h3 id="1. 准备工作"&gt;1. 准备工作&lt;/h3&gt;
&lt;p&gt;访问 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool 官网&lt;/a&gt;&lt;/strong&gt;，连接您的 MetaMask 或 OKX 钱包，并将网络切换至 BSC（币安智能链）。&lt;/p&gt;
&lt;h3 id="2. 进入一键发币页面"&gt;2. 进入一键发币页面&lt;/h3&gt;
&lt;p&gt;在菜单栏选择“BSC 一键发币”。这里提供了多种合约模版供您选择，无论是简单的社区币还是复杂的收税币，都能满足。&lt;/p&gt;
&lt;h3 id="3. 设置代币信息"&gt;3. 设置代币信息&lt;/h3&gt;
&lt;p&gt;在&lt;strong&gt;创建代币&lt;/strong&gt;界面填写以下核心参数：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;代币全称&lt;/strong&gt;：您的项目名称（如：Golden Banana）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代币符号&lt;/strong&gt;：代币的代码（如：GBNN）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;发行总量&lt;/strong&gt;：您计划&lt;strong&gt;发币&lt;/strong&gt;的总数（如：1,000,000,000）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代币 Logo&lt;/strong&gt;：上传图标，提升项目的辨识度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4. 确认部署"&gt;4. 确认部署&lt;/h3&gt;
&lt;p&gt;检查参数无误后，点击“&lt;strong&gt;一键发币&lt;/strong&gt;”。在钱包中点击确认，系统将自动在 BscScan 上完成合约部署与源码验证。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="关于发币的常见问题 (FAQ)"&gt;关于发币的常见问题 (FAQ)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q：一键发币后的代币所有权归谁？&lt;/strong&gt;
A：代币的所有权完全归属于部署合约的钱包地址。您可以通过 BananaTool 随时进行权限管理或丢弃。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q：创建代币后如何增加流动性？&lt;/strong&gt;
A：&lt;strong&gt;发币&lt;/strong&gt;成功后，您可以前往 PancakeSwap 添加 BNB 配对的流动性，随后代币即可自由交易。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q：发币安全吗？&lt;/strong&gt;
A：使用 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 进行&lt;strong&gt;一键发币&lt;/strong&gt;，合约逻辑透明且经过多次审计，有效规避了人为编写代码可能产生的漏洞风险。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;无论你是想在 Web3 领域初试身手，还是专业的项目方，&lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 都是你&lt;strong&gt;一键发币&lt;/strong&gt;的最佳伴侣。现在就访问官网，开启你的&lt;strong&gt;创建代币&lt;/strong&gt;之旅吧！&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;立即体验 BananaTool 一键发币平台&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="🏷️ 关键词优化标签"&gt;🏷️ 关键词优化标签&lt;/h3&gt;
&lt;p&gt;#一键发币 #创建代币 #发币 #BSC 发币 #BEP20 #代币发行 #智能合约 #BananaTool #Web3 教程&lt;/p&gt;</description>
      <author>bananatool</author>
      <pubDate>Sat, 17 Jan 2026 20:30:40 +0800</pubDate>
      <link>https://soldev.cn/topics/254</link>
      <guid>https://soldev.cn/topics/254</guid>
    </item>
    <item>
      <title>2026 专业教程：如何在 BSC 链实现一键发币？手把手教你创建代币</title>
      <description>&lt;p&gt;在 Web3 领域，&lt;strong&gt;发币&lt;/strong&gt;早已不再是程序员的专利。随着 BSC（币安智能链）生态的爆发，越来越多的项目方和社区领袖开始寻找更高效、更安全的&lt;strong&gt;一键发币&lt;/strong&gt;方案。&lt;/p&gt;

&lt;p&gt;本文将为您深度解析如何利用专业工具 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt;，在不触碰任何代码的情况下，轻松&lt;strong&gt;创建代币&lt;/strong&gt;并完成智能合约部署。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="为什么选择 BSC 链进行一键发币？"&gt;为什么选择 BSC 链进行一键发币？&lt;/h2&gt;
&lt;p&gt;在众多公链中，选择 BSC 进行&lt;strong&gt;发币&lt;/strong&gt;具有极高的性价比：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;成本极低&lt;/strong&gt;：&lt;strong&gt;创建代币&lt;/strong&gt;的手续费仅需极少量 BNB。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;生态繁荣&lt;/strong&gt;：上币后可立即对接 PancakeSwap 等主流去中心化交易所。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;操作简单&lt;/strong&gt;：完善的工具链支持，让&lt;strong&gt;一键发币&lt;/strong&gt;流程缩短至 1 分钟内。&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;h2 id="BananaTool：全能型一键发币工具箱"&gt;BananaTool：全能型一键发币工具箱&lt;/h2&gt;
&lt;p&gt;作为全球领先的代币管理平台，&lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 针对 &lt;strong&gt;“发币”&lt;/strong&gt; 这一核心需求进行了深度优化：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;一键发币&lt;/strong&gt;：支持标准 BEP20 合约及带有分红、回流、防夹子功能的高级合约。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;创建代币&lt;/strong&gt;：图形化界面，支持自定义代币名称、符号、精度及发行量。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;智能合约审计&lt;/strong&gt;：所有通过平台&lt;strong&gt;创建的代币&lt;/strong&gt;均使用审计过的标准模版，确保资产安全。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;发币后管理&lt;/strong&gt;：配套提供批量空投、流动性锁仓、权限丢弃等全套运营工具。&lt;/li&gt;
&lt;/ol&gt;

&lt;hr&gt;
&lt;h2 id="BSC 链创建代币详细步骤"&gt;BSC 链创建代币详细步骤&lt;/h2&gt;&lt;h3 id="1. 准备工作"&gt;1. 准备工作&lt;/h3&gt;
&lt;p&gt;访问 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool 官网&lt;/a&gt;&lt;/strong&gt;，连接您的 MetaMask 或 OKX 钱包，并将网络切换至 BSC（币安智能链）。&lt;/p&gt;
&lt;h3 id="2. 进入一键发币页面"&gt;2. 进入一键发币页面&lt;/h3&gt;
&lt;p&gt;在菜单栏选择“BSC 一键发币”。这里提供了多种合约模版供您选择，无论是简单的社区币还是复杂的收税币，都能满足。&lt;/p&gt;
&lt;h3 id="3. 设置代币信息"&gt;3. 设置代币信息&lt;/h3&gt;
&lt;p&gt;在&lt;strong&gt;创建代币&lt;/strong&gt;界面填写以下核心参数：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;代币全称&lt;/strong&gt;：您的项目名称（如：Golden Banana）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代币符号&lt;/strong&gt;：代币的代码（如：GBNN）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;发行总量&lt;/strong&gt;：您计划&lt;strong&gt;发币&lt;/strong&gt;的总数（如：1,000,000,000）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;代币 Logo&lt;/strong&gt;：上传图标，提升项目的辨识度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4. 确认部署"&gt;4. 确认部署&lt;/h3&gt;
&lt;p&gt;检查参数无误后，点击“&lt;strong&gt;一键发币&lt;/strong&gt;”。在钱包中点击确认，系统将自动在 BscScan 上完成合约部署与源码验证。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="关于发币的常见问题 (FAQ)"&gt;关于发币的常见问题 (FAQ)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q：一键发币后的代币所有权归谁？&lt;/strong&gt;
A：代币的所有权完全归属于部署合约的钱包地址。您可以通过 BananaTool 随时进行权限管理或丢弃。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q：创建代币后如何增加流动性？&lt;/strong&gt;
A：&lt;strong&gt;发币&lt;/strong&gt;成功后，您可以前往 PancakeSwap 添加 BNB 配对的流动性，随后代币即可自由交易。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q：发币安全吗？&lt;/strong&gt;
A：使用 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 进行&lt;strong&gt;一键发币&lt;/strong&gt;，合约逻辑透明且经过多次审计，有效规避了人为编写代码可能产生的漏洞风险。&lt;/p&gt;

&lt;hr&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;无论你是想在 Web3 领域初试身手，还是专业的项目方，&lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;BananaTool&lt;/a&gt;&lt;/strong&gt; 都是你&lt;strong&gt;一键发币&lt;/strong&gt;的最佳伴侣。现在就访问官网，开启你的&lt;strong&gt;创建代币&lt;/strong&gt;之旅吧！&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://bananatool.org/" rel="nofollow" target="_blank" title=""&gt;立即体验 BananaTool 一键发币平台&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="🏷️ 关键词优化标签"&gt;🏷️ 关键词优化标签&lt;/h3&gt;
&lt;p&gt;#一键发币 #创建代币 #发币 #BSC 发币 #BEP20 #代币发行 #智能合约 #BananaTool #Web3 教程&lt;/p&gt;</description>
      <author>bananatool</author>
      <pubDate>Fri, 16 Jan 2026 14:34:25 +0800</pubDate>
      <link>https://soldev.cn/topics/253</link>
      <guid>https://soldev.cn/topics/253</guid>
    </item>
    <item>
      <title>CiaoTool：Solana 链上最实用的“一键发币”工具平台</title>
      <description>&lt;p&gt;在 Solana 链上创建代币，对新手开发者来说可能有一定门槛。CiaoTool 提供免代码、一键发币的解决方案，让你轻松完成代币创建和管理。无论是初创项目，还是 NFT/GameFi项目，都可以快速上链并完成初始配置。&lt;/p&gt;

&lt;p&gt;主要功能：&lt;/p&gt;

&lt;p&gt;免代码发币：不需要 Solidity/Anchor 编程基础，快速生成 SPL Token。&lt;/p&gt;

&lt;p&gt;批量转账/空投：支持多对多操作，节省大量操作时间与手续费。&lt;/p&gt;

&lt;p&gt;智能管理：提供流动性管理以及一站式操作。&lt;/p&gt;

&lt;p&gt;多链选择：除了 Solana，还支持 BSC、Base、IoTeX、XLayer 等链路/&lt;/p&gt;

&lt;p&gt;详细的流程教学：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;访问 CiaoTool 工具集官网，并连接 Solana 钱包。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;点击创建页面后，填写代币信息（名称、符号、精度等）。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;确认信息后一键生成 SPL 代币。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;使用批量转账功能进行空投或奖励分发。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;想了解更多，访问 &lt;a href="https://ciaotool.io" rel="nofollow" target="_blank"&gt;https://ciaotool.io&lt;/a&gt; Solana 发币工具
&lt;img src="/uploads/photo/CiaoTool/97907b6a-1791-4265-876a-775ea3f6d4b9.png!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>CiaoTool</author>
      <pubDate>Mon, 12 Jan 2026 17:49:08 +0800</pubDate>
      <link>https://soldev.cn/topics/252</link>
      <guid>https://soldev.cn/topics/252</guid>
    </item>
    <item>
      <title>2026 年一键发币哪个平台最好：GTokenTool</title>
      <description>&lt;p&gt;在 2026 年，加密货币市场已进入一个高度成熟的阶段。随着区块链技术的不断演进，一键发币（One-Click Token Issuance）已成为 Web3 生态中不可或缺的工具。它允许开发者、项目方和普通用户快速创建自定义代币，而无需复杂的编程知识或漫长的审核过程。这种便利性不仅降低了进入门槛，还加速了 DeFi（去中心化金融）、NFT（非同质化代币）和 meme 币等领域的创新。根据行业报告，2026 年全球代币发行量预计将增长 30% 以上，主要得益于多链支持和 AI 辅助工具的普及。然而，在众多平台中，选择一个安全、高效且用户友好的平台至关重要。本文将详细探讨 2026 年一键发币的最佳平台，并重点分析 GTokenTool 为什么脱颖而出。&lt;/p&gt;

&lt;p&gt;一键发币的背景与 2026 年趋势
一键发币是指通过在线平台，一键生成智能合约、部署代币并集成流动性池的过程。这项技术起源于 Ethereum 的 ERC-20 标准，后来扩展到 Solana 的 SPL 代币、Binance Smart Chain 的 BEP-20 等。进入 2026 年，随着 Layer-2 解决方案（如 Optimism 和 Arbitrum）的优化，以及跨链桥的成熟，一键发币平台面临的新挑战包括：gas 费波动、监管合规（如 KYC/AML 要求）和黑客攻击风险。同时，新趋势如 AI 驱动的代币审计和零知识证明（ZK）隐私保护正成为标配。&lt;/p&gt;

&lt;p&gt;Become a member
根据 2025 年底的行业分析，代币发行平台的市场份额主要集中在几大巨头：Solana 生态的 Pump.fun 和 Raydium 工具、Ethereum 的 Uniswap Launchpad，以及新兴的多链平台如 GTokenTool。这些平台的目标用户从专业开发者到散户投资者不等，但 2026 年的关键是“易用性 + 安全性”的平衡。接下来，我们比较几大热门平台，并突出 GTokenTool 的优势。&lt;/p&gt;

&lt;p&gt;主要一键发币平台的比较
在 2026 年，一键发币平台众多，但根据用户反馈和市场占有率，我们选取几个代表性平台进行对比：GTokenTool、20Lab、Tokensoft 和 Pump.fun。这些平台均支持快速发行，但各有侧重。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GTokenTool：多链支持的领先者
GTokenTool 是一个基于区块链的在线工具箱，专为 DeFi 用户设计。它以“一键发币”为核心，支持 Solana（SPL 代币）、Binance Smart Chain（BSC）、Ethereum 和新兴链如 Base 和 Polygon。平台界面简洁，用户只需输入代币名称、符号、总供应量和税收机制（可选），即可在几分钟内完成部署。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;功能详解：
一键部署：自动生成智能合约，支持自定义税收（如营销税、流动性税）和反机器人机制。相比传统方法，这节省了 90% 的开发时间。
集成流动性：直接连接 Raydium、Uniswap 或 PancakeSwap，提供初始流动性池创建。
支持链：多达 10 多条公链，包括 Solana（低 gas 费首选）和 Ethereum（兼容性强）。
费用：全网最低
安全性：内置多重签名钱包和第三方审计。平台采用零知识证明保护用户隐私，避免 KYC 泄露。
用户体验：网页端和移动端优化，支持中文界面。提供 24/7 支持。
GTokenTool 的优势在于其 Solana 基础的极速发行（平均 10 秒完成），适合 meme 币和快速实验项目。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;20Lab：综合代币生成平台
20Lab 被誉为 2026 年最佳整体代币生成器。它专注于 Ethereum 和 Layer-2 链，支持 ERC-20/ERC-721 标准。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;功能详解：一键创建代币、NFT 和 DAO。集成 Launchpad 功能，可直接启动 IDO（初始 DEX 发行）。
支持链：Ethereum、Optimism、Arbitrum。
安全性：内置审计工具，但需额外付费。
费用：基础免费，高级版月费 10 USD。
用户体验：专业界面，适合企业用户。社区较小。
未来潜力：聚焦机构级代币化，如证券代币。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tokensoft：资产代币化专家
Tokensoft 是 2026 年顶级资产代币化平台之一，侧重于证券和实物资产。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;功能详解：一键发行合规代币，支持 KYC 集成。适用于房地产或艺术品代币化。
支持链：Ethereum、BSC 和 Polygon。
安全性：机构级，合规性强。无黑客记录。
费用：高，起步费 500 USD。
用户体验：复杂，需法律知识。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pump.fun：Solana meme 币专用
Pump.fun 是 Solana 生态的热门工具，专注于 meme 币一键发行。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;功能详解：极简界面，一键创建并上 Raydium。支持 bonding curve 机制。
支持链：仅 Solana。
安全性：中等，易受 rug pull 影响。事件率 1%。
费用：0.1 SOL。
用户体验：娱乐性强，但波动大。
使用 GTokenTool 的详细教程
注册：访问&lt;a href="https://sol.gtokentool.com" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com&lt;/a&gt;
，连接钱包（如 Phantom 或 MetaMask）。
设置代币：输入名称、符号、供应量。
部署：一键确认，支付 gas 费。
添加流动性：平台引导至 DEX，锁定 LP。
验证：使用内置工具审计合约。
整个过程不超过 5 分钟。建议从小额测试开始，避免风险&lt;/p&gt;

&lt;p&gt;结语：抓住 2026 年的机会
2026 年，一键发币将驱动 Web3 创新浪潮。GTokenTool 以其全面性和易用性，成为最佳平台。无论你是开发者还是投资者，选择它都能最大化效率和回报。市场在变，监管在紧，但工具如 GTokenTool 正让加密更民主化。行动起来，发行你的第一个代币吧。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Thu, 08 Jan 2026 13:33:59 +0800</pubDate>
      <link>https://soldev.cn/topics/251</link>
      <guid>https://soldev.cn/topics/251</guid>
    </item>
    <item>
      <title>币圈小白不想当韭菜？PandaTool 让你翻身做庄家</title>
      <description>&lt;p&gt;在加密货币的世界里，“快”就是金钱，“工具”就是武器。
如果你还在苦学 Solidity 代码，还在为部署合约反复测试 Bug，或者还在手动一个一个地址发空投，那么你已经输在了起跑线上。真正的“老猎人”早已换上了全自动武器 — — PandaTool。
为什么想要在 Web3 赚钱的人，都必须把 PandaTool 变成你的首选工具？答案只有四个字：效率红利。
&lt;img src="/uploads/photo/Jack5656/e5f383ab-b0e3-4b75-b8ad-10705472cecb.jpg!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;一、降低“试错成本”：发币不再是技术活，而是概率游戏&lt;/p&gt;

&lt;p&gt;在 Meme 币和热点项目层出不穷的今天，暴富的核心逻辑在于“快速尝试”。
传统方式：找开发、改代码、测试，耗时 3–5 天，花费数千美金。等到币发出来，热点早就凉了。
PandaTool 方式：5 分钟一键部署。无论是 BSC、Solana 还是以太坊，你只需要输入名字和总量。赚钱逻辑：既然没人能保证一个币必火，那就用极低的成本在一天内测试 10 个创意。只要有一个跑出来，收益就是成百上千倍。&lt;/p&gt;

&lt;p&gt;二、制造“赚钱效应”：顶级市值管理工具箱&lt;/p&gt;

&lt;p&gt;散户只会被一种东西吸引：漂亮的 K 线和高活跃的交易量。PandaTool 提供的全流程工具，让你一个人就能顶替一个专业的运营团队：
批量转账（Airdrop）：快速将代币分发给成千上万个活跃地址，瞬间制造出“持币地址数暴增”的繁荣假象，吸引链上分析工具的关注。
交易机器人（Market Making）：自动刷出交易量，让你的项目在 DexTool、Ave 等排名榜单上名列前茅。赚钱逻辑：没交易量就没流量。利用机器人制造“换手率”，才能让真正的买家看到你的潜力，从而进场接力。&lt;/p&gt;

&lt;p&gt;三、极致的“安全感”与“信任背书”&lt;/p&gt;

&lt;p&gt;在 Web3，信任很贵。PandaTool 提供的标准合约已经过市场千锤并论证。
权限丢弃/合约开源：通过平台一键放弃所有权、锁定流动性。这些操作会直接体现在链上审计工具中。
赚钱逻辑：当散户看到你的项目“权限已丢弃”、“流动性已锁”，他们才敢大仓位杀入。你给散户安全感，散户给你利润。&lt;/p&gt;

&lt;p&gt;四、全流程自动化：从创建到收割，只需一个后台&lt;/p&gt;

&lt;p&gt;PandaTool 不只是发币工具，它是 Web3 的全自动流水线：
一键发币：确立标的。
创建资金池：注入流动性，开启交易。
批量分发：营销造势。
市值管理：维持热度。&lt;/p&gt;

&lt;p&gt;结语：你是想当“韭菜”，还是当“庄家”？&lt;/p&gt;

&lt;p&gt;Web3 的财富永远向最懂得利用工具的人集结。当别人还在纠结代码报错时，你已经通过 PandaTool 完成了从发币到营销的全过程。这不仅仅是省下了几万块的开发费，更是抢占了稍纵即逝的市场先机。
工欲善其事，必先利其器。想要在 Web3 掘金，PandaTool 就是你最锋利的铲子。&lt;/p&gt;</description>
      <author>Jack5656</author>
      <pubDate>Wed, 07 Jan 2026 18:11:12 +0800</pubDate>
      <link>https://soldev.cn/topics/250</link>
      <guid>https://soldev.cn/topics/250</guid>
    </item>
  </channel>
</rss>
