Solana 闪电贷是什么?原理、成本与限制
Solana 闪电贷不要抵押,借和还在同一笔交易里完成。出借方怎么确认你会还、要花哪些钱、上限在哪里、有什么风险,这篇讲清楚。

Solana 闪电贷是一种不要抵押、不查信用的借款,条件只有一个:借来的钱必须在同一笔交易结束前还回去。
还款缺失或失败,网络会拒绝整笔交易,这笔借款就像从没发生过。永远不会留下欠款,所以借贷协议敢借给任何钱包。
听起来像漏洞,其实是两条普通规则在一起起作用:一笔交易要么全部成功,要么什么都不发生;程序可以读取它所在交易里的其他指令。闪电贷的一切,包括它会在哪里失灵,都从这两点来。
Solana 闪电贷如何在一笔交易里完成
Solana 把一笔交易当作一串按顺序执行的指令。Solana 官方文档对交易的说明写得很直接:任何一条指令失败,整笔交易就失败,所有状态改动都会回滚。闪电贷就是围绕这条规则搭起来的一串指令。
- 借出:借贷程序把代币从自己的金库转进你的代币账户。
- 使用:你自己的指令花掉这笔钱,比如一次兑换、一次清算、存到别的地方。
- 还款:借贷程序收回同样的数额,要收手续费的话再加上手续费。
如果第三步跑不了,比如兑换拿回来的比计划少,第一步会连同其他步骤一起撤销,金库回到原样。不需要抵押也是这个原因:普通贷款要抵押,是因为借和还之间隔着时间,而这里没有。

出借方怎么知道还款一定会来
借款指令先执行,所以它得在还款发生之前就做决定。办法是往后读:Solana 通过一个叫 instructions sysvar 的特殊账户,把正在执行的交易里每一条顶层指令都摆出来。Solana 的指令内省文档点名的正是这个用途:检查某条指令是否在同一笔交易里。
Kamino Lend 公开了程序源码,检查过程看得见。它的闪电借款会逐条扫描自己之后的指令,只有找到恰好一条匹配的还款才放款:
- 还款写的是同一个数额;
- 列出的账户相同,顺序也相同;
- 它指回借款所在的位置;
- 后面没有第二笔闪电借款。
和下面另外两家一样,Kamino 会拒绝从另一个程序内部发起的借款,因为 sysvar 只列顶层指令。marginfi 的设计不同:开始指令检查交易后面有没有结束指令,结束指令负责跑账户的健康检查。
细节很要紧。Kamino 的还款用一个数字记下借款的位置,所以钱包如果在借款前面插入自己的保护指令,还款就会指错指令,被拒绝。Jupiter Lend 的还款不带位置,这是闪电交易量工具在那里借款的原因之一。
Solana 上哪些借贷协议提供闪电贷
有三个借贷协议在自己的开发者文档里写明了 Solana 闪电贷。
| 出借方 | 出借方手续费 |
|---|---|
| Jupiter Lend | 按文档没有,但管理员掌握一个手续费设置 |
| Kamino Lend | 按储备(reserve)设定;某个储备可以关掉闪电贷 |
| marginfi(文档现以 Project 0 名义发布) | 按文档没有 |
闪电贷用来做什么
这些用途有个共同点:只在几条指令之间需要一大笔钱,之后就不需要了。
- 套利。在便宜的地方买,在贵的地方卖,然后还款。价差已经消失的话,卖出所得不够还款,整笔交易回滚。
- 清算。用借来的钱替一个不健康的借款人还债,折价拿到的抵押品兑换回来,用来还这笔贷款。
- 换抵押品与再融资。用借来的代币还掉一笔贷款,取出抵押品,兑换掉或搬到另一家借贷协议,重新借款,再还款。
- 自我清算。用自己的抵押品把债务还下来,省掉清算人会拿走的溢价。Kamino 的「用抵押品还款」流程就是这样做的。
- 循环杠杆。借款,兑换成抵押资产,存进去,再以它为抵押借款,然后还款。Kamino 的 Multiply 就建在这上面。
- 交易量。在同一个池子里买入一个代币再卖回去,钱包只付这一来一回的成本。
最后这一种就是闪电交易量工具在做的事:它从 Jupiter Lend 借 SOL,在 PumpSwap、Raydium、Orca 或 Meteora 的某一个池子里买入你的代币再卖回,还款并付掉工具自己的费用,全程只要一次签名,钱包弹出之前就会显示完整的交易价格。任何人查看这笔交易,都能看到同一个钱包的一次借款、一次买入和一次卖出。想留住代币的话,改用经 Jupiter 路由的代币兑换。
一笔 Solana 闪电贷要花哪些钱
本金不是成本,它在同一笔交易里就回去了。你付的是它周围的一切。
出借方手续费。Jupiter Lend 和 marginfi 的文档写明闪电贷免手续费,Kamino 按储备设定手续费。Jupiter Lend 的管理员仍然可以改这个设置,所以闪电交易量每次借款前都会读一遍,不是零就拒绝构建交易。
兑换费用与价格冲击。贷款里的每一次兑换都要付池子的手续费,大额资金打进浅池,价格会朝不利的方向走两次,买进一次,卖出一次,流动性池的深度怎么读讲的就是这个。每笔兑换都要设最低到手数量,因为还款差一点就会拖垮整笔交易;滑点这个数字怎么定讲了怎么取舍。
网络费用。基础费是每个签名 5,000 lamport,另加优先费,按你申请的每个计算单元计价;闪电贷申请的计算量远多于一次转账。优先费该给多少讲了怎么定。
失败的闪电贷便宜,但不是免费:被打包进区块后回滚的交易照样要付网络费,Solana 文档和 Jupiter 的闪电贷指南都这么写。模拟失败、根本没发出去的交易,不花任何费用。

签名前先模拟。会失败的闪电贷会表现为一次失败的模拟,到那一步它还没花你任何钱。
限制:交易大小、计算量和出借方的余额
闪电贷大不过一笔交易:这类贷款使用的 v0 交易最多 1,232 字节、1,400,000 个计算单元。借款、还款、兑换以及它们用到的账户都得装进去,所以开发者要靠地址查找表。
它也不能跨两笔交易。sysvar 只列出正在执行的这笔交易,所以放在第二笔交易里的还款,借款指令看不到,就算两笔在同一个 Jito bundle 里也一样。Jito bundle 到底保证什么是另一个问题。
还有出借方手里有多少。贷款从它的金库里出,有些出借方还设了单笔上限,借贷也可能被暂停,所以能借多少是当下读出来的数,不是常量。Kamino 和 marginfi 还规定一笔交易只能有一笔闪电贷。
风险:钱包警告和预言机攻击
准备好看到钱包警告。Phantom 在无法顺利模拟一笔交易时会发出警告,列出的原因里就有交易接近大小上限和交易会失败。闪电贷本身数额大,又同时调用一个借贷协议和一个 DEX。价格变动太大时模拟会失败,这是钱包在告诉你这笔贷款还不上。
每一笔闪电贷也都是公开的。任何人都能在区块浏览器里打开这笔交易,Wallet Scope 的批量钱包分析还能看到背后那些钱包的买卖记录和盈亏。
更黑暗的历史属于别的协议。闪电贷攻击是在一笔交易之内把价格掰弯:借来的大额资金推动一个浅池,而某个协议把这个池子当作喂价来读,于是按扭曲的数字行事。Kamino 的文档把时间加权价格和价格区间列为防线。你自己设的最低到手数量,也能限制大额兑换周围的三明治攻击。
闪电贷、普通贷款与保证金交易的区别
| 闪电贷 | 抵押贷款 | 保证金交易 | |
|---|---|---|---|
| 抵押 | 无 | 价值高于贷款 | 你的保证金加上仓位 |
| 持续时间 | 一笔交易 | 直到你还款 | 账户保持健康期间 |
| 还不上时 | 交易回滚 | 抵押品被清算 | 仓位被清算 |
| 你要付 | 出借方手续费(如有)、兑换费和网络费 | 借款期间的利息 | 利息加交易手续费 |
抵押贷款和保证金交易的风险随时间累积,因为它们开着的时候价格一直在动。Solana 闪电贷没有「开着的时候」:你可能损失的,是一笔回滚交易的网络费,再加上需要你自己余额补上的交易亏损。
本文解释闪电贷的工作原理,不构成金融、投资、法律或税务建议。贷款里的交易可能亏钱,出借方也可能修改条款或暂停借贷。
闪电贷常见问题
Solana 闪电贷免费吗?
贷款本身可以是免费的:Jupiter Lend 和 marginfi 的文档写明闪电贷免手续费,Kamino 则按储备设定手续费。兑换费、网络费以及你所用工具的费用照样要付。
需要抵押或信用审核吗?
不需要。还款只要在同一笔交易里并且成功就行。你的钱包仍然要有 SOL 付网络费,以及补上交易留下的缺口。
还不上会怎样?
整笔交易被拒绝,里面的每项改动都会撤销,借款也包括在内。已经打包进区块的交易照样付网络费;模拟失败、从没发出的交易什么都不用付。
闪电贷能跨两笔交易或一个 Jito bundle 吗?
不能。出借方通过 instructions sysvar 找还款,而它只列出正在执行的这笔交易,所以放在别处的还款不算数,同一个 bundle 里也一样。
为什么闪电贷老出现在攻击事件报告里?
因为它让任何人都能在一笔交易的时间里调动一大笔钱。被攻击的是那些相信浅池现货价格的协议,借来的资金足以推动那个价格。用时间平均价格,这类攻击就难得多。


