网淘吧来吧,欢迎您!

Torch Liquidation Bot

2026-03-30 新闻来源:网淘吧 围观:8
电脑广告
手机广告

清算机器人

你来到这里,是因为你想在Torch市场上运行一个清算守护程序——并且希望安全地进行。

Torch上每个已迁移的代币都有一个内置的借贷市场。持有者可以锁定代币作为抵押品,并从社区金库借出SOL(最高贷款价值比为50%,周利率为2%)。当一笔贷款的贷款价值比超过65%时,它就变得可被清算。任何人都可以清算它,并获得抵押品价值的10%作为奖励。

Torch Liquidation Bot

这就是这个机器人的用武之地。

它使用SDK的批量贷款扫描器(getAllLoanPositions)扫描每个已迁移代币的借贷市场——每个代币通过一次RPC调用返回所有按健康度预先排序的活跃仓位。当它发现一个资不抵债的仓位时,它会通过你的金库进行清算。抵押的代币会进入你的金库关联代币账户(ATA)。清算所需的SOL成本从你的金库支出。签署交易的代理钱包本身不持有任何资产。

这不是一个只读扫描器。这是一个功能完整的守护程序,它能生成自己的密钥对,验证金库链接,并在一个持续循环中自主执行清算交易。


工作原理

┌──────────────────────────────────────────────────────────┐
│                  LIQUIDATION LOOP                          │
│                                                           │
│  1. Discover migrated tokens (getTokens)                  │
│  2. For each token, scan all loans (getAllLoanPositions)   │
│     — single RPC call, returns positions sorted by health │
│     — liquidatable → at_risk → healthy                    │
│  3. Skip tokens with no active loans                      │
│  4. For each liquidatable position:                       │
│     → buildLiquidateTransaction(vault=creator)            │
│     → sign with agent keypair                             │
│     → submit and confirm                                  │
│     → break when health != 'liquidatable' (pre-sorted)    │
│  5. Sleep SCAN_INTERVAL_MS, repeat                        │
│                                                           │
│  All SOL comes from vault. All collateral goes to vault.  │
│  Agent wallet holds nothing. Vault is the boundary.       │
└──────────────────────────────────────────────────────────┘

代理密钥对

机器人会生成一个全新的密钥对在每次启动时于进程中生成。无需私钥文件。无需环境变量(除非您想自行提供)。该密钥对为一次性使用——它仅用于签署交易,不存储任何有价值资产。

首次运行时,机器人会检查此密钥对是否已与您的金库关联。若未关联,它将打印出您需要用于关联的精确SDK调用指令:

--- ACTION REQUIRED ---
agent wallet is NOT linked to the vault.
link it by running (from your authority wallet):

  buildLinkWalletTransaction(connection, {
    authority: "<your-authority-pubkey>",
    vault_creator: "<your-vault-creator>",
    wallet_to_link: "<agent-pubkey>"
  })

then restart the bot.
-----------------------

请通过您的授权钱包(硬件钱包、多签钱包等您使用的任何方式)进行关联。代理程序永远不需要授权方的密钥,授权方也永远不需要代理程序的密钥。它们共享的是金库,而非密钥。

金库

此金库与完整Torch市场协议中的Torch金库相同。它持有所有资产——包括SOL和代币。代理程序仅是临时控制器。

当机器人清算某个头寸时:

  • SOL成本来自金库(用于支付清算以覆盖借款人债务)
  • 抵押代币转入金库的关联代币账户(ATA)
  • 10%奖励意味着收到的抵押物价值比支出的SOL高出10%

委托人始终保留完全控制权:

  • withdrawVault()——可随时提取SOL
  • withdrawTokens(mint)— 随时提取抵押代币
  • unlinkWallet(agent)— 立即撤销代理访问权限

如果代理密钥对遭泄露,攻击者将只能获取少量资产,且您可通过单笔交易撤销其对金库的访问权限。


入门指南

1. 安装

npm install torch-liquidation-bot@4.0.2

或使用 ClawHub 提供的捆绑源码——Torch SDK 包含在lib/torchsdk/目录中,机器人源码位于lib/kit/目录。

2. 创建并注资金库(人类主体)

从您的授权钱包执行:

import { Connection } from "@solana/web3.js";
import {
  buildCreateVaultTransaction,
  buildDepositVaultTransaction,
} from "./lib/torchsdk/index.js";

const connection = new Connection(process.env.SOLANA_RPC_URL);

// Create vault
const { transaction: createTx } = await buildCreateVaultTransaction(connection, {
  creator: authorityPubkey,
});
// sign and submit with authority wallet...

// Fund vault with SOL for liquidations
const { transaction: depositTx } = await buildDepositVaultTransaction(connection, {
  depositor: authorityPubkey,
  vault_creator: authorityPubkey,
  amount_sol: 5_000_000_000, // 5 SOL
});
// sign and submit with authority wallet...

3. 运行机器人

VAULT_CREATOR=<your-vault-creator-pubkey> SOLANA_RPC_URL=<rpc-url> npx torch-liquidation-bot

首次运行时,机器人将打印代理密钥对及关联说明。请从您的授权钱包完成关联操作,随后重启机器人。

4. 配置

变量必需默认值说明
SOLANA_RPC_URL--Solana RPC 端点(HTTPS)。备用:RPC_URL
VAULT_CREATOR--金库创建者公钥
SOLANA_PRIVATE_KEY--一次性控制器密钥对(base58 或 JSON 字节数组)。如果省略,则在启动时生成新的密钥对(推荐)
SCAN_INTERVAL_MS30000扫描周期之间的毫秒数(最小 5000)
LOG_LEVELinfodebug,info,warn,错误

架构

packages/bot/src/
├── index.ts    — entry point: keypair generation, vault verification, scan loop
├── config.ts   — loadConfig(): validates SOLANA_RPC_URL, VAULT_CREATOR, SOLANA_PRIVATE_KEY, SCAN_INTERVAL_MS, LOG_LEVEL
├── types.ts    — BotConfig, LogLevel interfaces
└── utils.ts    — sol(), bpsToPercent(), withTimeout(), createLogger()

该机器人由约192行TypeScript代码构成。它只做一件事:找出水下贷款并通过金库进行清算。

依赖项

版本用途
@solana/web3.js1.98.4Solana RPC、密钥对、交易
torchsdk3.7.22代币查询、批量贷款扫描、清算构建器、金库查询

两个运行时依赖项。均固定为精确版本。不使用^~范围指定。


金库安全模型

Torch Market金库的七项保障条款在此同样适用:

属性保障
完全托管金库持有所有SOL和所有抵押代币。代理钱包不持有任何资产。
闭环清算所用的SOL来自金库,抵押代币则归入金库。不会泄露给代理。
权限分离创建者(不可变的PDA种子) vs 权限方(可转让的管理员) vs 控制器(一次性签名者)。
每个钱包仅有一个链接一个代理只能属于一个金库。PDA的唯一性在链上强制执行这一点。
无需许可的存款任何人都可以为金库充值。硬件钱包存款,代理进行清算。
即时撤销权限方可以随时解除代理的链接。只需一笔交易。
仅限权限方提款只有金库权限方可以提取SOL或代币。代理无法提取价值。

清算的闭环经济体系

方向流向
SOL流出金库 → 借款人的国库债务(用于偿还贷款)
代币流入借款人抵押品 → 金库ATA(按10%折扣)
净额金库收到的抵押品价值为所花费SOL的110%

该机器人设计上具有盈利性——每次成功的清算所返回的价值都高于其成本。利润在金库中累积。授权方可在准备就绪时提取。


借贷参数

参数数值
最大贷款价值比50%
清算阈值65%
利率每周期约2%(约每周)
清算奖励10%
资金利用率上限国库的70%
最低借款额0.1 SOL

抵押品价值根据Raydium池储备金计算。抵押品存入和提取时适用0.03%的Token-2022转账费(3个基点,每个铸币固定)。

何时发生清算

当贷款的健康因子超过65%时,该贷款将进入可清算状态。这通常在以下情况发生:

  • 代币价格下跌(抵押品价值相对于债务减少)
  • 利息累积(债务在每个周期以2%的速度增长)
  • 上述两种情况同时发生

机器人会检查position.health === 'liquidatable'——SDK根据链上Raydium储备和贷款的累积债务计算健康因子。


使用的SDK函数

机器人使用Torch SDK的一个特定子集:

函数用途
getTokens(connection, { status: 'migrated' })发现所有具有活跃借贷市场的代币
getAllLoanPositions(connection, mint)批量扫描某个代币的所有活跃贷款——返回按健康因子预排序的头寸(可清算的优先),一次性获取池价格
getVault(connection, creator)在启动时验证金库是否存在
getVaultForWallet(connection, wallet)验证代理是否已关联到金库
buildLiquidateTransaction(connection, params)构建清算交易(通过金库路由)
confirmTransaction(connection, sig, wallet)通过RPC在链上确认交易(验证签名者,检查Torch指令)

扫描与清算模式

import { getTokens, getAllLoanPositions, buildLiquidateTransaction } from 'torchsdk'

// 1. Discover migrated tokens
const { tokens } = await getTokens(connection, { status: 'migrated', sort: 'volume', limit: 50 })

for (const token of tokens) {
  // 2. Bulk scan — one RPC call per token, positions sorted liquidatable-first
  const { positions } = await getAllLoanPositions(connection, token.mint)

  for (const pos of positions) {
    if (pos.health !== 'liquidatable') break  // pre-sorted, done

    // 3. Build and execute through vault
    const { transaction, message } = await buildLiquidateTransaction(connection, {
      mint: token.mint,           // token with the underwater loan
      liquidator: agentPubkey,    // agent wallet (signer)
      borrower: pos.borrower,     // borrower being liquidated
      vault: vaultCreator,        // vault creator pubkey (SOL from vault, tokens to vault)
    })
    transaction.sign(agentKeypair)
    await connection.sendRawTransaction(transaction.serialize())
  }
}

日志输出

=== torch liquidation bot ===
agent wallet: 7xK9...
vault creator: 4yN2...
scan interval: 30000ms

[09:15:32] INFO  vault found — authority=8cpW...
[09:15:32] INFO  agent wallet linked to vault — starting scan loop
[09:15:32] INFO  treasury: 5.0000 SOL
[09:15:33] INFO  LIQUIDATABLE | SDKTEST | borrower=3AyZ... | LTV=72.50% | owed=0.5000 SOL
[09:15:34] INFO  LIQUIDATED | SDKTEST | borrower=3AyZ... | sig=4vK9... | collateral received at 10% discount

签名与密钥安全

安全边界是金库,而非密钥。

代理密钥对在每次启动时通过Keypair.generate()重新生成。它持有约0.01 SOL用于支付燃气费。如果密钥泄露,攻击者将获得:

  • 少量资产(用于燃气的SOL)
  • 以及授权方可通过一笔交易撤销的金库访问权限

代理永远不需要授权方的私钥。授权方也永远不需要代理的私钥。他们共享的是金库,而非密钥。

规则

  1. 绝不向用户索取其私钥或助记词。金库授权方需通过其自有设备进行签名。
  2. 绝不记录、打印、存储或传输任何私钥材料。代理密钥对仅存在于运行时内存中。
  3. 切勿将密钥嵌入源代码或日志中。代理公钥会被打印出来——私钥绝不会暴露。
  4. 使用安全的 RPC 端点。默认使用私有的 RPC 提供商。切勿为主网交易使用未加密的 HTTP 端点。

RPC 超时设置

所有 SDK 调用都包裹了 30 秒的超时设置(位于 utils.ts 中的 `withTimeout`)。一个挂起或无响应的 RPC 端点无法无限期地阻塞机器人——调用会被拒绝,错误会被扫描循环捕获,然后机器人会继续处理下一个代币或周期。

环境变量

变量是否必需用途
SOLANA_RPC_URL/RPC_URLSolana RPC 端点 (HTTPS)
VAULT_CREATORVault creator pubkey — 标识机器人通过哪个金库运行
SOLANA_PRIVATE_KEY可选 — 如果省略,机器人会在启动时生成一个新的密钥对(推荐)

外部运行时依赖

SDK 中包含向外部服务发起出站 HTTPS 请求的函数。机器人运行时路径会联系两个服务:

服务用途调用时机机器人是否使用?
CoinGecko(api.coingecko.com)用于显示的 SOL/USD 价格带 USD 定价的代币查询是 — 通过getTokens()getToken()
Irys Gateway(gateway.irys.xyz)代币元数据回退(名称、符号、图像)getToken()当链上元数据URI指向Irys时是 — 通过getTokens()
SAID协议(api.saidprotocol.com)代理身份验证和信任等级查询verifySaid()— 该机器人不调用verifySaid()

confirmTransaction()不会联系SAID。尽管它位于SDK的said.js模块中,但它仅调用connection.getParsedTransaction()(Solana RPC)用于验证交易是否在链上成功并确定事件类型。不会向任何外部服务发送数据。

不会向CoinGecko或Irys发送任何凭据。所有请求均为只读GET请求。如果任一服务不可访问,SDK会优雅降级。绝不会向任何外部端点传输私钥材料。


测试

要求Surfpool运行主网分叉:

surfpool start --network mainnet --no-tui
pnpm test

测试结果:9项通过,0项失败(Surfpool主网分叉)。

测试验证内容
连接RPC可达性
获取代币发现已迁移代币
获取借贷信息读取所有代币的借贷状态
获取所有贷款头寸批量扫描活跃贷款,验证排序顺序(优先显示可清算贷款)
获取代币信息代币元数据、价格、状态
获取钱包对应的金库对于未关联的钱包,金库链接返回空值
进程内密钥对无需外部密钥

错误代码

  • VAULT_NOT_FOUND:此创建者不存在金库
  • WALLET_NOT_LINKED:代理钱包未关联到金库
  • NOT_LIQUIDATABLE:头寸贷款价值比低于清算阈值
  • NO_ACTIVE_LOAN:此钱包/代币无未结贷款
  • INVALID_MINT:未找到代币

链接


这个机器人的存在是因为Torch借贷市场需要清算人。当贷款资不抵债且无人清算时,资金库将承担损失。活跃的清算人保护资金库健康,并从中获利。保险库使其安全——所有价值都保留在托管中,所有风险都得到控制,而人类主体始终掌握密钥。

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第349266名访客 今日有175篇新文章/评论