<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Solar 论坛</title>
    <link>https://www.soldev.cn/</link>
    <description>Solar 论坛社区最新发帖。</description>
    <language>en-us</language>
    <item>
      <title>新手做代币批量转账，就用 GTokenTool</title>
      <description>&lt;p&gt;新手做代币批量转账，直接用 GTokenTool 就够了。它支持 10+ 条主流公链，一次操作最高能转几百个地址，Gas 费能省掉 60%-90%，操作流程 3 步走，连区块链完全小白也能 5 分钟上手。&lt;/p&gt;

&lt;p&gt;接下来咱们就来拆解清楚，这东西到底是干嘛的、为什么它最适合新手、跟其他工具有啥区别、具体怎么用，以及你可能想问的所有问题。&lt;/p&gt;

&lt;p&gt;二、新手做代币批量转账，到底该用什么工具？
2.1 先搞懂：什么是代币批量转账？
代币批量转账，英文叫 Batch Token Transfer 或 Multisender，通俗来讲，就是把“一笔一笔慢慢转”这件事，变成“一次全部搞定”。它通过智能合约，在单笔链上交易里打包多个转账指令，一次性完成对多个地址的代币分发。&lt;/p&gt;

&lt;p&gt;打个比方：传统手动转账就像你拿着现金，一家一家去送货 — — 每次出门都要打车（付一次 Gas），效率低得离谱，光是路上耗的时间就让人头皮发麻。而批量转账像是把所有货装进一个集装箱，一趟物流车全送完，只掏一次运费。&lt;/p&gt;

&lt;p&gt;场景举例：&lt;/p&gt;

&lt;p&gt;你想给运营活动的 100 名中奖用户各发 0.01 ETH；
DAO 组织要给 30 个核心成员发月度代币薪水；
项目方要对早期用户进行空投激励；
你想把自己多个钱包里的零散资产归拢到一个主钱包里。
这些场景如果用手动转账，时间和成本都不是普通人能承受的。&lt;/p&gt;

&lt;p&gt;2.2 新手用批量工具的三大“惨状”
先聊聊没工具时的痛苦，因为这能帮你真正理解“为什么要用工具”。&lt;/p&gt;

&lt;p&gt;Gas 费黑洞：传统方式下，每笔转账都是一次独立交易，需要支付独立 Gas。在以太坊（ETH）主网上，单笔转账的 Gas 费常常要几美元甚至几十美元。如果你要转 100 个地址，100 笔交易的 Gas 费加起来真的可以让人崩溃。&lt;/p&gt;

&lt;p&gt;时间黑洞：手动转 100 笔，假设每笔从输入地址到确认需要 1 分钟（实际上链确认时间还要等），100 个地址就是 100 分钟。中间打错一次地址，整笔交易都得重来。&lt;/p&gt;

&lt;p&gt;操作失误风险：链上转账是不可逆的，地址填错一个字符，资产永久丢失。手动逐一输入数十上百个地址，出错概率极高。这种精神紧绷的感觉，做过的人应该都懂。&lt;/p&gt;

&lt;p&gt;2.3 GTokenTool — — 功能全面，对新手友好的全能选手
GTokenTool 是目前市面上最稳定、便捷的批量转账工具之一。无论是项目方回馈社区，还是个人进行资产划转，它都能极大提升工作效率。&lt;/p&gt;

&lt;p&gt;核心亮点：&lt;/p&gt;

&lt;p&gt;极高 Gas 节省：通过智能合约一次性打包多笔转账，比逐笔操作节省高达 90% 的 Gas 费。
全 EVM 链覆盖：完美适配 BSC、ETH、Polygon、Arbitrum、Base 等所有 EVM 兼容链。
灵活分配：支持给不同地址发送相同金额（等额模式），也支持每个地址设置不同金额（自定义模式）。
并行处理机制：向 500 个地址转账，GTokenTool 平均耗时 1–2 分钟，而部分其他工具可能需要 10–15 分钟。
CSV 批量导入：先在 Excel 里整理好“地址 + 金额”两列，导出 CSV 后直接上传，无需手动逐条输入。
操作三步走：&lt;/p&gt;

&lt;p&gt;第一步：连接钱包。打开 GTokenTool&lt;a href="https://docs.gtokentool.com/kuai-jie-gong-ju/batch-transfer"&gt;代币批量转账&lt;/a&gt;页面，点击“连接钱包”，在 MetaMask 弹窗中确认。确保钱包已切换到你要操作的公链（如 BSC 主网）。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/6a12dcd4-a6bf-476e-920e-fae4fb79e564.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第二步：输入转账信息。填入代币的合约地址（比如 BSC 链上的 USDT 合约地址），然后粘贴或上传你的收款列表。格式为“地址，金额”，用英文逗号分隔，每行一个。&lt;/p&gt;

&lt;p&gt;Write on Medium
第三步：确认并发送。系统会自动校验地址格式和余额是否足够，确认预览无误后点击发送，在钱包中确认交易即可。&lt;/p&gt;

&lt;p&gt;注意事项：建议单次转账地址数不超过 100 个，以确保交易能被区块链节点顺利打包。如果超过 100 个地址，分批次操作即可。另外，如果收款方是交易所地址，务必先确认该交易所支持合约转账，否则代币可能无法到账。&lt;/p&gt;

&lt;p&gt;支持三种批量转账模式：
一转多（MultiSend）：一个钱包发给多个地址，适合空投和奖励分发。
多转一（Collect / Wallet Merge）：多个钱包归集到一个地址。
多对多（Many-to-Many）：多个钱包→多个地址，可实现复杂的矩阵钱包资金流管理，是撸毛用户和高级运营者最喜欢的功能。
2.4 省钱原理：Gas 费为什么能省那么多？
这个原理新手不必深究，但知道能帮你省多少钱还是很重要的。&lt;/p&gt;

&lt;p&gt;一句话解释版：手动转账 = 每转一个地址发一笔交易，笔笔付 Gas。批量转账 = 把所有地址打成一个包，发一笔交易，只付一次 Gas。打包越多地址，每个地址分摊到的 Gas 就越少，这就是“批处理效应”。&lt;/p&gt;

&lt;p&gt;用 GTokenTool 在 BSC 链上转 200 个地址，大约只需要 0.01 BNB 的 Gas，而手动转 200 笔的 Gas 成本可能高达 0.5 BNB 甚至更高，省下的比例确实惊人。&lt;/p&gt;

&lt;p&gt;2.5 新手必看的安全注意事项
作为新手，安全是底线。以下几点请一定注意：&lt;/p&gt;

&lt;p&gt;使用前先确认两点：第一，收款方如果是交易所地址，必须提前确认对方支持“合约转账”，否则代币可能无法到账；第二，最好使用 PC 端操作，浏览器装好 MetaMask 插件，操作更稳定，出错率更低。&lt;/p&gt;

&lt;p&gt;权限管理上，第一次操作某个代币时需要授权智能合约调用该代币。建议使用“精准授权”只授权本次需要的金额，尽量不要选“无限授权”。&lt;/p&gt;

&lt;p&gt;地址格式非常重要，收款地址和金额必须用英文逗号（“,”）分隔，不能用中文逗号（“，”），这是新手最容易犯的格式错误。&lt;/p&gt;

&lt;p&gt;分批控制方面，建议单次转账地址数不超过 100 个，如果数量较多，分批操作更稳妥。这样万一某批出问题，影响范围有限，你还能及时调整。&lt;/p&gt;

&lt;p&gt;三、常见问题解答
Q1：用 GTokenTool 做批量转账，我的私钥安全吗？&lt;/p&gt;

&lt;p&gt;安全。GTokenTool 的工作方式是前端直接调用你浏览器的钱包插件（如 MetaMask）来完成交易签名，你钱包的私钥永远不会离开你的本地设备，工具本身根本不会也不能接触你的私钥。每笔交易都由你自己在钱包弹窗中最终确认，控制权始终在你手上。&lt;/p&gt;

&lt;p&gt;Q2：GTokenTool 平台本身收费吗？&lt;/p&gt;

&lt;p&gt;基础功能大部分情况下是免费或极低费用的，主要费用是你支付给区块链本身的 Gas 费。部分高级功能可能有平台服务费，具体以工具页面显示为准。但相比手动转账多付的 Gas，这个平台费完全值得。&lt;/p&gt;

&lt;p&gt;Q3：万一批量转账失败了，我的代币会丢吗？&lt;/p&gt;

&lt;p&gt;不会丢。如果某笔批量交易中部分转账因为地址格式错误或其他原因失败了，那失败的那部分代币会自动退回你的钱包；已经成功发送出去的部分，因为链上不可逆，是不可撤回的。这个机制确保了你的资产不会凭空消失。&lt;/p&gt;

&lt;p&gt;Q4：一次最多能转多少个地址？&lt;/p&gt;

&lt;p&gt;这和具体的链有关。以 Solana 为例，单次最多可处理约 380 个地址；在 EVM 链（如 BSC、ETH）上，一般建议单次控制在 100 个地址以内，以确保交易能被节点顺利打包。如果地址更多，工具会自动进行分批，分几次确认即可。&lt;/p&gt;

&lt;p&gt;Q5：往交易所地址转代币，有什么要特别注意的？&lt;/p&gt;

&lt;p&gt;非常重要的一点：必须先确认交易所是否支持“智能合约转账”。部分交易所（尤其是中小所）只接受普通账户转账，合约发过来的可能会被拦截，钱虽然发出去了，但交易所那端不给你上账。不确定的话，先联系交易所客服问问。&lt;/p&gt;

&lt;p&gt;四、总结
回顾整篇文章，对于新手做代币批量转账这件事，核心结论就一句话：别在手动转账上浪费时间精力和钱，直接上 GTokenTool。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Wed, 06 May 2026 13:30:08 +0800</pubDate>
      <link>https://www.soldev.cn/topics/273</link>
      <guid>https://www.soldev.cn/topics/273</guid>
    </item>
    <item>
      <title>Solana 账户租金回收：清理僵尸账户，找回你的“意外之财”</title>
      <description>&lt;p&gt;&lt;a href="https://docs.gtokentool.com/solana/wallet-management/rent-withdrawal"&gt;Solana 租金回收&lt;/a&gt;（Rent Recovery / Rent Reclaim）是指关闭链上闲置的 SPL Token 账户 或 NFT 账户，从而取回之前作为“租金”锁定的 SOL。&lt;/p&gt;

&lt;p&gt;为什么需要租金回收？
在 Solana 网络上：
每个代币（SPL Token）或 NFT 账户都需要存入约 0.00203928 SOL 作为租金押金（用于存储空间）。
当你卖掉、转走或空投领取代币后，如果账户余额为 0，但账户没有关闭，这部分 SOL 就会一直被锁定。
频繁交易（如刷 meme 币、领空投）会产生大量空账户，累计可能锁住几 SOL 甚至更多。
关闭这些空账户后，租金 SOL 会退回到你的主钱包余额（需支付少量交易 Gas 费）。&lt;/p&gt;

&lt;p&gt;注意：关闭账户前，必须确保账户内无任何代币或 NFT 余额，否则无法关闭（或需先转移/燃烧）。&lt;/p&gt;

&lt;p&gt;推荐回收方式&lt;/p&gt;

&lt;p&gt;大多数用户使用以下工具或钱包内置功能，一键扫描并批量回收：&lt;/p&gt;

&lt;p&gt;1.钱包内置功能：
OKX Web3 钱包：进入“Solana 代币账户回收”页面，连接钱包后输入地址或直接扫描，一键回收。
Bitget Wallet：更多 → Solana 租金回收 → 查询 → 领取。
Phantom、Solflare 等主流钱包也常有类似“关闭账户”或“Rent Claim”功能。&lt;/p&gt;

&lt;p&gt;2.在线工具（支持批量）：&lt;/p&gt;

&lt;p&gt;GTokenTool：&lt;a href="https://sol.gtokentool.com/zh-CN/walletManagement/rentRecovery" rel="nofollow" target="_blank"&gt;https://sol.gtokentool.com/zh-CN/walletManagement/rentRecovery&lt;/a&gt; （支持单个/多钱包，查询空账户、代币账户、NFT）。&lt;/p&gt;

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

&lt;p&gt;打开 GTokenTool 租金回收页面，连接你的 Solana 钱包。
点击“查询”或自动扫描，工具会列出可回收的账户数量和预计可领取 SOL。
选择要关闭的账户（优先选空账户，慎选有代币的账户，尤其是 NFT 或有价值的代币）。
确认并在钱包中签名交易（可能需多次签名，如果账户很多）。
交易确认后，SOL 实时退回主账户。
&lt;img src="/uploads/photo/gtokentool/e0344f5c-8e6a-481d-9a62-a74c1e1b104e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;每个账户大约可回收 0.002 SOL，批量操作（如 50 个账户）可回收 0.1 SOL 以上，视账户大小略有差异。&lt;/p&gt;

&lt;p&gt;注意事项
Gas 费：回收过程需要支付少量 SOL 作为交易费，确保钱包里有足够 SOL（通常几毫 SOL 即可）。
风险：回收时若选择有余额的代币账户，工具通常会&lt;strong&gt;燃烧（Burn）&lt;/strong&gt;代币。请只回收无价值或垃圾资产，避免误烧有价值的 NFT/代币。
不回收会怎样？SOL 会一直锁定，不会自动消失，但也无法使用。Solana 有租金豁免机制，但对普通 Token 账户仍需手动关闭。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Thu, 30 Apr 2026 11:53:46 +0800</pubDate>
      <link>https://www.soldev.cn/topics/272</link>
      <guid>https://www.soldev.cn/topics/272</guid>
    </item>
    <item>
      <title>Solana 批量发送代币教程：用 GTokenTool 轻松完成社区空投</title>
      <description>&lt;p&gt;&lt;a href="https://docs.gtokentool.com/kuai-jie-gong-ju/batch-transfer"&gt;代币批量转账&lt;/a&gt;，英文叫 Bulk Token Transfer（也称 Batch Transfer 或 MultiSend），是一种让用户能够在单次交易中把同一种代币发送到多个接收地址的功能。&lt;/p&gt;

&lt;p&gt;它背后的核心原理并不复杂：把多个“发币”的指令打包在一起，只向区块链提交一次交易请求，由智能合约统一执行所有转账。正如 ERC-20 批量转账的实现原理所述 — — 「批量转账将多个转账操作合并为一个交易，从而减少了交易成本和时间」。&lt;/p&gt;

&lt;p&gt;打个比方，普通转账就像去邮局寄信，每封信都要单独买邮票、排队投递；而批量转账相当于把所有信塞进一个大包裹，只付一次邮费、只排一次队，邮局再帮你把信拆开分别送达。&lt;/p&gt;

&lt;p&gt;在实际操作中，批量转账通常会形成一个一对多的模式 — — 一个发送方、多个接收方，单次交易即可完成全部操作。不同区块链的实现略有差异，以太坊上的 ERC-20 代币需要额外部署辅助合约来实现批量处理，而像 ERC-1155 这样的多资产代币标准则原生支持一次性转账多个代币。&lt;/p&gt;

&lt;p&gt;常见的批量转账模式
在实际应用中，批量转账并不只有“一个地址发给多个地址”这一种。根据发送方和接收方的数量关系，可以分为以下几种常见模式：&lt;/p&gt;

&lt;p&gt;一转多（1 → N） ：一个钱包 → 多个钱包，用于空投、分红，是最常用的模式。
多转一（N → 1） ：多个钱包 → 一个钱包，用于资产归集、收益汇聚。
多对多（N → N） ：多个钱包 → 多个钱包，用于矩阵钱包管理、资金流分配，适合需要隐匿分红路径的运营场景。
批量转账的主要应用场景
批量转账在 Web3 领域的应用非常广泛，主要有以下几类：&lt;/p&gt;

&lt;p&gt;代币空投（Airdrop） ：这是最经典的应用场景。项目方通过批量转账，一次性将代币分发给几百到几万个社区成员，用于推广或激励。
社区分红与奖励：按持币量向持有者发放分红，或者给活动参与者批量发放奖励代币。
工资/薪酬发放：一些 Web3 项目使用代币支付团队成员薪酬，批量转账比每月逐个转账高效得多。
资金归集与管理：将分散在多个地址的代币集中到一个地址，或者把代币分配到多个地址分散风险。
NFT 分发：向多个持有者批量发送 NFT 资产。
退款处理：批量将代币退还给用户。&lt;/p&gt;

&lt;p&gt;批量转账流程&lt;/p&gt;

&lt;p&gt;第 1 步，连接钱包&lt;/p&gt;

&lt;p&gt;进入 GTokenTool 代币批量转账页面：&lt;a href="https://gtokentool.com/sendertoken" rel="nofollow" target="_blank"&gt;https://gtokentool.com/sendertoken&lt;/a&gt;，点击右上角，连接小狐狸钱包，并切换到主网。&lt;/p&gt;

&lt;p&gt;完成后，会看到“链名称”和 您的“钱包地址” ，如下图：&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/0d7b7a70-c4b2-4abf-8e33-02eee4a48f9e.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 2 步，输入信息&lt;/p&gt;

&lt;p&gt;假设我们给三个地址发送不同数量的代币，输入如下：&lt;/p&gt;

&lt;p&gt;代币地址：BNB
收款地址和数量
&lt;img src="/uploads/photo/gtokentool/ced4cf1f-88cc-47c3-9075-b8e7ecdb925a.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;第 3 步，完成&lt;/p&gt;

&lt;p&gt;输入完成后，点击“下一步”按钮。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/gtokentool/c12e7e34-e103-4e56-96d4-9f081d9d45fc.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;确认无误后，点击“发送”按钮，在小狐狸上支付 gas 费，就完成了。&lt;/p&gt;

&lt;p&gt;注意事项
权限授权：在使用批量转账工具时，通常需要先授权智能合约动用你钱包里的特定额度。
地址校验：由于是一次性发送，一旦地址列表出现格式错误或包含错误地址（如不支持该代币的合约地址），可能导致部分转账失败或资产丢失。
链上限制：不同的区块链（如 Ethereum、Solana、BNB Chain）对单个区块能容纳的交易指令有上限。如果一次性批量发送数千个地址，可能需要分批次进行（例如每 200 个地址为一个批次）。&lt;/p&gt;</description>
      <author>gtokentool</author>
      <pubDate>Wed, 29 Apr 2026 13:26:59 +0800</pubDate>
      <link>https://www.soldev.cn/topics/271</link>
      <guid>https://www.soldev.cn/topics/271</guid>
    </item>
    <item>
      <title>使用 CiaoTool 一站式完成 Solana 发币与流动性管理</title>
      <description>&lt;ol&gt;
&lt;li&gt;基础代币管理功能&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;代币创建与权限管理，在 CiaoTool 平台上创建 SPL 代币非常简单：&lt;/p&gt;

&lt;p&gt;核心功能包括：&lt;/p&gt;

&lt;p&gt;创建代币：填写代币名称、符号和供应量即可完成&lt;/p&gt;

&lt;p&gt;代币增发：为已有代币增加供应量，方便后续空投&lt;/p&gt;

&lt;p&gt;燃烧代币：减少流通总量，维护价格稳定&lt;/p&gt;

&lt;p&gt;放弃权限：可选择放弃铸币权等权限，增强社区信任&lt;/p&gt;

&lt;p&gt;冻结/解冻账户：管理特定地址的交易能力&lt;/p&gt;

&lt;p&gt;Token-2022 专区：&lt;/p&gt;

&lt;p&gt;CiaoTool 还支持 Token-2022：创建带有内置转账费用的代币。&lt;/p&gt;

&lt;p&gt;创建税费代币：无需编写代码即可创建 Solana 代币，并可自定义交易税率。&lt;/p&gt;

&lt;p&gt;提取交易税费：随时提取累计费用，实现无缝收入控制。&lt;/p&gt;

&lt;p&gt;二、Raydium 流动性管理工具&lt;/p&gt;

&lt;p&gt;标准 AMM 池操作&lt;/p&gt;

&lt;p&gt;捆绑买入：通过多个地址同时买入，避免被识别为单一操作&lt;/p&gt;

&lt;p&gt;一键捆绑卖出：快速退出仓位，适合需要套现的场景&lt;/p&gt;

&lt;p&gt;卖出并捆绑买入：在卖出的同时建立新仓位，实现仓位轮换&lt;/p&gt;

&lt;p&gt;市值管理：设置价格区间，自动维护代币价格稳定&lt;/p&gt;

&lt;p&gt;防夹刷量：防止被夹子机器人攻击，保护交易利润&lt;/p&gt;

&lt;p&gt;批量交易：分散交易行为，让市场表现更自然&lt;/p&gt;

&lt;p&gt;CPMM 和 CLMM 专用工具：针对不同类型的流动性池，CiaoTool 提供专门优化的做市机器人和管理工具，确保在不同池类型中都能有效运作。&lt;/p&gt;

&lt;p&gt;三、PumpFun/Pump 平台专属工具&lt;/p&gt;

&lt;p&gt;Pump 平台对操作速度要求更高，CiaoTool 为此优化了专门工具：&lt;/p&gt;

&lt;p&gt;开盘并买入：在创建交易对的同时建立初始仓位&lt;/p&gt;

&lt;p&gt;做市机器人：自动化维持买卖盘平衡&lt;/p&gt;

&lt;p&gt;微量刷单：通过小额交易维持交易活跃度&lt;/p&gt;

&lt;p&gt;狙击功能：快速打满内盘，并在外盘狙击&lt;/p&gt;

&lt;p&gt;这些工具特别适合需要快速启动和运营的模因币项目。&lt;/p&gt;

&lt;p&gt;四、钱包与资金管理工具&lt;/p&gt;

&lt;p&gt;管理多个地址的资金是 Solana 项目的常见需求：&lt;/p&gt;

&lt;p&gt;一对多转账：从主钱包向多个地址分发资金&lt;/p&gt;

&lt;p&gt;多对多转账：在地址间批量转移资产&lt;/p&gt;

&lt;p&gt;批量归集：将分散资金快速汇总&lt;/p&gt;

&lt;p&gt;租金回收：Solana 账户租金回收，降低成本&lt;/p&gt;

&lt;p&gt;资金安全管理&lt;/p&gt;

&lt;p&gt;冷换仓功能：将大额持仓分散至多地址，降低持币集中度与链上曝光风险。&lt;/p&gt;

&lt;p&gt;五、Bonk 及模因币专用工具&lt;/p&gt;

&lt;p&gt;针对模因币的独特需求，CiaoTool 提供了专门工具集：&lt;/p&gt;

&lt;p&gt;创建并买入：代币创建后立即建立初始市场仓位&lt;/p&gt;

&lt;p&gt;USD1 交易专区：面向 Bonk USD1 场景，支持创建及交易相关操作&lt;/p&gt;

&lt;p&gt;想获得完整的 Solana 上线与流动性策略？&lt;/p&gt;

&lt;p&gt;👉 联系我们获取专业运营方案&lt;/p&gt;

&lt;p&gt;六、完整项目运营流程示例&lt;/p&gt;

&lt;p&gt;流动性建立阶段&lt;/p&gt;

&lt;p&gt;在 Raydium 创建流动性池&lt;/p&gt;

&lt;p&gt;使用捆绑买入建立初始仓位&lt;/p&gt;

&lt;p&gt;设置市值管理参数&lt;/p&gt;

&lt;p&gt;市场运营阶段&lt;/p&gt;

&lt;p&gt;根据需求使用 Pump 或 Bonk 工具&lt;/p&gt;

&lt;p&gt;通过批量交易维持市场活跃&lt;/p&gt;

&lt;p&gt;定期调整做市策略&lt;/p&gt;

&lt;p&gt;资金管理阶段&lt;/p&gt;

&lt;p&gt;使用批量归集工具回收资金&lt;/p&gt;

&lt;p&gt;通过多对多转账准备下一轮运营&lt;/p&gt;

&lt;p&gt;合理利用租金回收降低成本&lt;/p&gt;

&lt;p&gt;七、CiaoTool 的核心优势&lt;/p&gt;

&lt;p&gt;操作一体化：所有功能在同一平台完成，无需切换多个工具&lt;/p&gt;

&lt;p&gt;非托管安全：私钥始终在用户钱包中，保障资产安全&lt;/p&gt;

&lt;p&gt;成本效率：批量操作显著降低 Gas 和租金成本&lt;/p&gt;

&lt;p&gt;策略丰富：覆盖各种交易场所的运营策略&lt;/p&gt;

&lt;p&gt;免代码：无需编程知识即可上手专业操作&lt;/p&gt;

&lt;p&gt;总结&lt;/p&gt;

&lt;p&gt;在 Solana 上进行发币与流动性管理，工具的选择直接影响运营效率和最终效果。CiaoTool 通过将发币、流动性管理、做市和资金管理等核心功能整合在一个平台，为项目方提供了从项目启动到持续运营的完整解决方案。&lt;/p&gt;

&lt;p&gt;无论是初次尝试 Solana 的新手，还是需要提升运营效率的资深团队，CiaoTool 都能提供合适的工具组合，帮助你在竞争激烈的市场中保持优势。通过合理的工具使用和策略规划，你可以更专注于项目本身的发展，而将复杂的链上操作交给专业工具来处理。&lt;/p&gt;</description>
      <author>CiaoTool</author>
      <pubDate>Tue, 28 Apr 2026 15:22:43 +0800</pubDate>
      <link>https://www.soldev.cn/topics/270</link>
      <guid>https://www.soldev.cn/topics/270</guid>
    </item>
    <item>
      <title>2026 最好用的 solana 租金回收工具</title>
      <description>&lt;p&gt;在 Solana 区块链上，每一次交互（如持有新的代币、创建 NFT 或使用 DeFi 协议）都会产生一笔“隐藏”的费用 — — 租金（Rent）。虽然单笔金额很小，但随着时间的推移，这些闲置账户中积累的 SOL 也会变得相当可观。&lt;/p&gt;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&lt;p&gt;如果你在操作过程中遇到任何问题，可以随时查阅 PandaTool 帮助文档，或者加入官方社区获取支持。&lt;/p&gt;</description>
      <author>Jack5656</author>
      <pubDate>Mon, 30 Mar 2026 17:46:49 +0800</pubDate>
      <link>https://www.soldev.cn/topics/265</link>
      <guid>https://www.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://www.soldev.cn/topics/264</link>
      <guid>https://www.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://www.soldev.cn/topics/263</link>
      <guid>https://www.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://www.soldev.cn/topics/262</link>
      <guid>https://www.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://www.soldev.cn/topics/261</link>
      <guid>https://www.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://www.soldev.cn/topics/260</link>
      <guid>https://www.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://www.soldev.cn/topics/259</link>
      <guid>https://www.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://www.soldev.cn/topics/258</link>
      <guid>https://www.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://www.soldev.cn/topics/257</link>
      <guid>https://www.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://www.soldev.cn/topics/256</link>
      <guid>https://www.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://www.soldev.cn/topics/255</link>
      <guid>https://www.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://www.soldev.cn/topics/254</link>
      <guid>https://www.soldev.cn/topics/254</guid>
    </item>
  </channel>
</rss>
