すべての投稿
ガイド

Solanaのフラッシュローンとは?仕組みと注意点

Solanaのフラッシュローンは担保なしで借り、同じトランザクションの中で返します。貸し手の確かめ方、費用、限界、リスクを順に説明します。

13 分で読めます J Tools Editorial
フラッシュローンが同じトランザクションの中で閉じる場面で、借りた100 SOLの返済まで済み、ウォレットは2.41 SOLのままのフラッシュボリュームの仕組みパネル

Solanaのフラッシュローンは、担保も審査もなしでトークンを借り、同じトランザクションが終わる前に返す貸し出しです。

返済が欠けるか失敗すればトランザクションごと拒否され、ローンはなかったことになります。貸しが残らないので、貸付プロトコルは誰にでも貸せます。

抜け道のようですが、支えは普通のルール二つです。トランザクションは全部通るか何も通らないか。プログラムは同じトランザクションの命令を読める。動きも壊れ方もここから来ます。

Solanaのフラッシュローンは一つのトランザクションでどう動くか

Solanaはトランザクションの命令を順に実行し、Solana公式のトランザクション解説のとおり、一つでも失敗すれば全体が失敗して状態の変更はすべて戻ります。

  1. 借りる:貸し手のプログラムが保管庫のトークンをあなたのトークンアカウントへ移す。
  2. 使う:あなたの命令で使う。スワップ、清算、別の場所への預け入れなど。
  3. 返す:貸し手が同じ額を、手数料があれば上乗せして取り戻す。

三つ目が動かなければ(スワップの戻りが計画より少ないなど)、一つ目もまとめて取り消され、保管庫は元のままです。担保が要らないのも、普通のローンと違って借りてから返すまでに時間が流れないからです。

オンチェーンでトランザクションが始まり、最初の手順として100 SOLを借りた段階で、価格とウォレットの2.41 SOLはまだ変わらないフラッシュボリュームの仕組み画面

返済が来ることを貸し手はどう知るのか

借入は返済より先に動くので、先を読みます。実行中のトランザクションのトップレベルの命令は、命令sysvarという特別なアカウントですべて読めます。命令イントロスペクションの公式解説も、ある命令が同じトランザクションにあるかの確認を用途の例に挙げています。

Kamino Lendが公開するソースを見ると、フラッシュ借入は後ろの命令を順に調べ、合う返済がちょうど一つなければ貸しません。

  • 返済が同じ額を指定している。
  • 同じアカウントを同じ順で並べている。
  • 借入の位置を指し返している。
  • 二つ目のフラッシュ借入が続かない。

ほかの二つの貸し手と同じく、Kaminoは別のプログラム経由の借入を断ります。sysvarはトップレベルの命令しか載せないからです。marginfiは形が違い、開始の命令が後ろに終了の命令があるかを確かめ、終了の命令が健全性チェックを走らせます。

Kaminoの返済は借入の位置を番号で持つので、ウォレットが借入の前にガード命令を足すと違う命令を指し、拒否されます。Jupiter Lendの返済は位置を持たず、フラッシュボリュームのツールがそこで借りる一因です。

フラッシュローンを出すSolanaの貸し手

三つの貸付プロトコルが、自前の開発者向け資料でフラッシュローンを説明します。

貸し手 貸し手の手数料
Jupiter Lend 資料上はなし。ただし管理者が手数料の設定を持つ
Kamino Lend リザーブごとに設定し、オフにもできる
marginfi(資料は現在Project 0名義) 資料上はなし

フラッシュローンの使い道

どれも、数個の命令のあいだだけ大きな額が要る仕事です。

  • 裁定取引:安く買って高く売り、返す。差が消えていれば売りで返せず、巻き戻る。
  • 清算:不健全な借り手の債務を返し、割引で得た担保をスワップして返済に充てる。
  • 担保の入れ替えと借り換え:借りた分でローンを返して担保を抜き、スワップか別の貸し手へ移して借り直し、返す。
  • 自己清算:自分の担保で債務を減らし、清算人のプレミアムを払わずに済ませる。Kaminoの担保での返済がこれ。
  • ループ:借りて担保の資産にスワップして預け、それを担保に借りて返す。KaminoのMultiplyの土台。
  • 出来高:同じプールで買って売り戻す。ウォレットは往復の分だけ払う。

これをするのがフラッシュボリュームのツールです。Jupiter LendからSOLを借り、PumpSwap、Raydium、Orca、Meteoraのどれか一つのプールでトークンを買って売り戻し、返済と手数料まで一つの署名で済ませます。総額はウォレットが開く前に表示され、チェーン上では誰にでも一つのウォレットの借入、買い、売りが見えます。トークンを残すならJupiter経由のトークンスワップを使ってください。

Solanaのフラッシュローンにかかる費用

元本は同じトランザクション内で戻るので、費用はその周りの分だけです。

貸し手の手数料。Jupiter Lendとmarginfiは資料上は手数料なし、Kaminoはリザーブごとに設定します。Jupiter Lendは管理者が設定を変えられるため、フラッシュボリュームは毎回手数料を読み、ゼロでなければ組み立てません。

スワップ手数料と価格影響。スワップごとにプールの手数料がかかり、薄いプールに大きな額を当てると入りと出の二度、価格が不利に動きます(流動性プールの深さの読み方)。返済が足りなければ全部が沈むので、各スワップに最低受取額を。目安はスリッページ設定の決め方に。

ネットワーク手数料。基本手数料は署名一つにつき5,000ランポート。加えて、要求する計算単位ごとに値が付く優先手数料があり、フラッシュローンは送金よりずっと多くの計算量を要求します(優先手数料はいくら払うべきか)。

失敗したローンは安いものの、無料ではありません。ブロックに入って巻き戻ったトランザクションもネットワーク手数料を払う、とSolanaとJupiterの資料にあります。シミュレーションで失敗し送られなかったものは、何もかかりません。

まだ何も始まっていない状態で、ウォレットに2.41 SOLがあり、これから100 SOLの売買ボタンを押すところのフラッシュボリュームの仕組み画面

署名前にシミュレーションを。失敗するフラッシュローンはそこで失敗が見え、まだ何も払っていません。

限界:大きさ、計算量、貸し手の手元

フラッシュローンは一つのトランザクションを超えられず、使われるv0トランザクションは最大1,232バイト、1,400,000計算単位です。借入、返済、スワップとそのアカウントを全部入れるため、作り手はアドレスルックアップテーブルに頼ります。

二つにまたがることもできません。sysvarが載せるのは実行中のトランザクションだけで、別の返済は同じJitoバンドルの中でも借入から見えません。Jitoバンドルが保証することは別の話です。

ローンは貸し手の保管庫から出て、1回ごとの上限を設ける貸し手もあり、貸し出しは止まることもあります。最大額は定数ではなく、その時点の読み取り値です。Kaminoとmarginfiは、トランザクション一つにフラッシュローン一つまでです。

リスク:ウォレットの警告とオラクル攻撃

ウォレットの警告は出るものと考えてください。Phantomはシミュレーションがきれいに通らないと警告し、原因に上限近い大きさや失敗を挙げます。このローンは大きく、貸し手とDEXを同時に呼びます。価格が動きすぎればシミュレーションは失敗します。ローンが返せないという知らせです。

フラッシュローンはすべて公開です。誰でもエクスプローラーで開け、Wallet Scopeの一括ウォレット分析なら背後のウォレットの取引と損益も見えます。

暗い歴史はほかのプロトコルのものです。フラッシュローン攻撃は一つのトランザクション内で価格をゆがめます。借りた額が薄いプールを押し、そこを価格フィードにするプロトコルがゆがんだ数字で動くのです。Kaminoのドキュメントは時間加重の価格と価格の許容幅を守りに挙げます。自分の最低受取額は大きなスワップへのサンドイッチ攻撃も抑えます。

フラッシュローンと普通のローン、証拠金取引の違い

フラッシュローン 担保付きローン 証拠金取引
担保 なし ローンより高い価値 預け入れとポジション
期間 トランザクション一つ 返すまで 口座が健全なあいだ
返せないと 巻き戻る 担保を清算 ポジションを清算
払うもの 貸し手の手数料(あれば)、スワップ・ネットワーク手数料 借りている間の利息 利息と取引手数料

担保付きローンと証拠金取引は、開いているあいだ値動きのリスクを抱え続けます。Solanaのフラッシュローンに「あいだ」はなく、失いうるのは巻き戻ったトランザクションの手数料と、自分の残高で埋める取引の損失です。

この記事はフラッシュローンの仕組みの説明で、金融、投資、法律、税務の助言ではありません。ローン内の取引で損をすることもあり、貸し手は条件の変更や貸し出しの停止ができます。

フラッシュローンのよくある質問

Solanaのフラッシュローンは無料ですか?

ローン自体はそうなり得ます。Jupiter Lendとmarginfiは資料上は手数料なし、Kaminoはリザーブごとに設定。スワップ、ネットワーク、使うツールの手数料は別に払います。

担保や審査は要りますか?

要りません。返済が同じトランザクションで成功すれば足ります。ただしネットワーク手数料と取引の不足分のSOLは要ります。

ローンを返せなかったらどうなりますか?

トランザクション全体が拒否され、借入も含めてすべて戻ります。ブロックに入ればネットワーク手数料は払い、シミュレーションで失敗し送られなければ何も払いません。

二つのトランザクションやJitoバンドルにまたがれますか?

できません。貸し手は命令sysvarで返済を探し、そこには実行中のものしか載りません。同じバンドルでも、ほかの返済は数えられません。

なぜ攻撃の報告にフラッシュローンが出てくるのですか?

一つのトランザクションのあいだ、誰でも大きな額を動かせるからです。やられたのは、借りた額で動く薄いプールのスポット価格を信じたプロトコル。時間平均の価格なら、ずっと難しくなります。

J
著者
J Tools Editorial

J Toolsチームからの投稿

J Tools Editorial のすべての投稿を見る →

関連投稿