<?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 最新全链一键发币教程：从零开始教你创建代币</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>
    <item>
      <title>靠谱新世界官网 98--yl--588--.cc</title>
      <description>&lt;p&gt;想注册腾--龙不是镜头那个的账号呀，没问题，我这就给你说说注册流程！
首先呢，通过公式飞机= ZCCX888   康讯公式=  kk8856  李从嘉数列得知，你得打开浏览器，在搜索引擎里输入“腾龙不是镜头官方网站” ，【98------yl--------588-------.cc】找到官方网址并点击进入哦。
进入官网后，在首页找到“会员中心”“我的账户”“注册/登录”之类的选项，这些选项可能在页面的顶部导航栏、侧边栏或者底部链接中，你仔细找找看。
点击注册入口后，就进入注册页面啦。你需要按照提示填写个人信息，比如姓名、性别、出生日期等，记得姓名要准确填写哦，#腾龙镜头# 因为可能会涉及产品保修等服务时的身份核实呢。
接下来，填写联系方式，比如电子邮箱地址和手机号码。电子邮箱是接收会员服务信息、产品资讯、促销活动等重要内容的渠道；手机号码则可能用于身份验证或者接收重要通知短信。
然后，设置用户名和密码。用户名要尽量容易记忆哦，密码则需要具备一定的安全性，建议包含字母、数字和特殊字符，并且长度不少于 8 位。
在注册过程中，会有会员协议和隐私政策的链接，你需要仔细阅读这些内容，并且勾选同意选项后才能完成注册哦。
填写完所有必要信息并且同意相关协议后，点击“注册”或者“提交”按钮。系统可能会提示你注册成功，并引导你登录会员账户，开始享受会员服务啦&lt;/p&gt;</description>
      <author>laoquan</author>
      <pubDate>Thu, 01 Jan 2026 13:57:55 +0800</pubDate>
      <link>https://soldev.cn/topics/249</link>
      <guid>https://soldev.cn/topics/249</guid>
    </item>
    <item>
      <title>新世界总负责人李哥</title>
      <description>&lt;p&gt;想注册腾--龙不是镜头那个的账号呀，没问题，我这就给你说说注册流程！
首先呢，通过公式飞机= ZCCX888   康讯公式=  kk8856  李从嘉数列得知，你得打开浏览器，在搜索引擎里输入“腾龙不是镜头官方网站” ，【98------yl--------588-------.cc】找到官方网址并点击进入哦。
进入官网后，在首页找到“会员中心”“我的账户”“注册/登录”之类的选项，这些选项可能在页面的顶部导航栏、侧边栏或者底部链接中，你仔细找找看。
点击注册入口后，就进入注册页面啦。你需要按照提示填写个人信息，比如姓名、性别、出生日期等，记得姓名要准确填写哦，#腾龙镜头# 因为可能会涉及产品保修等服务时的身份核实呢。
接下来，填写联系方式，比如电子邮箱地址和手机号码。电子邮箱是接收会员服务信息、产品资讯、促销活动等重要内容的渠道；手机号码则可能用于身份验证或者接收重要通知短信。
然后，设置用户名和密码。用户名要尽量容易记忆哦，密码则需要具备一定的安全性，建议包含字母、数字和特殊字符，并且长度不少于 8 位。
在注册过程中，会有会员协议和隐私政策的链接，你需要仔细阅读这些内容，并且勾选同意选项后才能完成注册哦。
填写完所有必要信息者“提交”按钮。系统可能会提示你注册成功，并引导你登录会员账户，开始享受会员服务啦&lt;/p&gt;</description>
      <author>laoquan</author>
      <pubDate>Thu, 01 Jan 2026 13:16:15 +0800</pubDate>
      <link>https://soldev.cn/topics/248</link>
      <guid>https://soldev.cn/topics/248</guid>
    </item>
    <item>
      <title>靠谱腾 - 龙怎么注册怎么开户 98--yl--588--.cc</title>
      <description>&lt;p&gt;想注册腾--龙不是镜头那个的账号呀，没问题，我这就给你说说注册流程！
首先呢，通过公式飞机= ZCCX888   康讯公式=  kk8856  李从嘉数列得知，你得打开浏览器，在搜索引擎里输入“腾龙不是镜头官方网站” ，【98------yl--------588-------.cc】找到官方网址并点击进入哦。
进入官网后，在首页找到“会员中心”“我的账户”“注册/登录”之类的选项，这些选项可能在页面的顶部导航栏、侧边栏或者底部链接中，你仔细找找看。
点击注册入口后，就进入注册页面啦。你需要按照提示填写个人信息，比如姓名、性别、出生日期等，记得姓名要准确填写哦，#腾龙镜头# 因为可能会涉及产品保修等服务时的身份核实呢。
接下来，填写联系方式，比如电子邮箱地址和手机号码。电子邮箱是接收会员服务信息、产品资讯、促销活动等重要内容的渠道；手机号码则可能用于身份验证或者接收重要通知短信。
然后，设置用户名和密码。用户名要尽量容易记忆哦，密码则需要具备一定的安全性，建议包含字母、数字和特殊字符，并且长度不少于 8 位。
在注册过程中，会有会员协议和隐私政策的链接，你需要仔细阅读这些内容，并且勾选同意选项后才能完成注册哦。
填写完所有必要信息并且同意相关协议后，点击“注册”或者“提交”按钮。系统可能会提示你注册成功，并引导你登录会员账户，开始享受会员服务啦&lt;/p&gt;</description>
      <author>laoquan</author>
      <pubDate>Thu, 01 Jan 2026 12:57:30 +0800</pubDate>
      <link>https://soldev.cn/topics/247</link>
      <guid>https://soldev.cn/topics/247</guid>
    </item>
    <item>
      <title>腾 - 龙在线充值 98--yl-588--.cc</title>
      <description>&lt;p&gt;想注册腾--龙不是镜头那个的账号呀，没问题，我这就给你说说注册流程！首先呢，通过公式飞机= ZCCX888 康讯公式= kk8856 李从嘉数列得知，你得打开浏览器，在搜索引擎里输入“腾龙不是镜头官方网站” ，【98------yl--------588-------.cc】找到官方网址并点击进入哦。进入官网后，在首页找到“会员中心”“我的账户”“注册/登录”之类的选项，这些选项可能在页面的顶部导航栏、侧边栏或者底部链接中，你仔细找找看。点击注册入口后，就进入注册页面啦。你需要按照提示填写个人信息，比如姓名、性别、出生日期等，记得姓名要准确填写哦，#腾龙镜头# 因为可能会涉及产品保修等服务时的身份核实呢。接下来，填写联系方式，比如电子邮箱地址和手机号码。电子邮箱是接收会员服务信息、产品资讯、促销活动等重要内容的渠道；手机号码则可能用于身份验证或者接收重要通知短信。然后，设置用户名和密码。用户名要尽量容易记忆哦，密码则需要具备一定的安全性，建议包含字母、数字和特殊字符，并且长度不少于 8 位。在注册过程中，会有会员协议和隐私政策的链接，你需要仔细阅读这些内容，并且勾选同意选项后才能完成注册哦。填写完所有必要信息并且同意相关协议后，点击“注册”或者“提交”按钮。系统可能会提&lt;img src="/uploads/photo/laoquan/e26e9fa0-e649-4b63-8f91-b17d37d12ad6.jpg!large" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>laoquan</author>
      <pubDate>Wed, 31 Dec 2025 20:03:08 +0800</pubDate>
      <link>https://soldev.cn/topics/246</link>
      <guid>https://soldev.cn/topics/246</guid>
    </item>
  </channel>
</rss>
