Skip to content

调研:ClaimYourSOL

帮助用户关闭无用的 Solana 账户并回收租金。技术简单但解决了真实痛点。


项目背景

ClaimYourSOL 帮助用户关闭无用的 Solana 账户并回收租金(SOL)。

问题来源

在 Solana 上,每个 Token Account 创建时都需要锁定一定 SOL 作为租金。交易完成后如果不主动关闭这些账户,锁定的 SOL 就无法回收。

graph TB
    subgraph "问题产生过程"
        A["用户购买 NFT"] --> B["创建 Token Account<br/>锁定 ~0.002 SOL 租金"]
        B --> C["NFT 卖出或转走"]
        C --> D["Token Account 余额为 0<br/>但仍存在且锁定租金"]
        D --> E["💸 大量空账户<br/>SOL 被白白锁定"]
    end

部分平台(如 ME)会自动关闭空 Token Account,但部分不会。

核心概念回顾

概念说明
AccountSolana 链上的存储区域
Rent存储数据需支付的租金
Rent Exempt持有超过 2 年租金则免租(SOL 被锁定)
Token Account存储特定 SPL Token 的账户

实现原理

1. 查找空 Token 账户

javascript
// 获取用户所有 Token 账户
const parsedTokenAccounts = await connection.getParsedTokenAccountsByOwner(
  new PublicKey(walletAddress),
  { programId: new PublicKey(TOKEN_PROGRAM_ID) }
);

// 筛选余额为 0 的空账户
const emptyTokenAccounts = parsedTokenAccounts.value.filter(
  accountInfo => accountInfo.account.data.parsed.info.tokenAmount.amount === '0'
);

2. 计算可回收租金

javascript
const totalRent = emptyTokenAccounts.reduce(
  (total, item) => total + item.account.lamports, 0
);
console.log(`可回收: ${totalRent / 1e9} SOL`);

3. 关闭账户并回收

javascript
for (const accountInfo of emptyTokenAccounts) {
  const closeAccountInstruction = createCloseAccountInstruction(
    accountInfo.pubkey,  // 要关闭的账户
    feePayer,            // 接收余额的账户
    feePayer,            // 关闭权限
  );
  transaction.add(closeAccountInstruction);
}

完整流程

sequenceDiagram
    participant User as 用户
    participant App as ClaimYourSOL
    participant RPC as Solana RPC
    participant Chain as Solana

    User->>App: 连接钱包
    App->>RPC: 查询所有 Token 账户
    RPC-->>App: 返回账户列表
    App->>App: 筛选余额为 0 的空账户
    App->>App: 计算可回收总租金
    App-->>User: 显示可回收金额
    User->>App: 确认回收
    App->>App: 构建 closeAccount 交易
    App->>User: 请求签名
    User->>Chain: 签名并发送交易
    Chain-->>User: 租金返还到钱包 💰

商业模式

项目比例
用户收到80%
平台抽成20%
邀请返佣平台抽成的 20%(即总额的 4%)

启发

  • 技术实现并不复杂,核心就是查询空账户 + 调用 closeAccount
  • 但解决了一个真实的用户痛点
  • 这类工具如果集成到钱包中,可以成为差异化功能
  • 思路:关注用户在链上交互中的"痛点碎片",用简单工具解决