전체 글
가이드

솔라나 플래시론이란? 작동 원리와 비용, 한계

솔라나 플래시론은 담보 없이 빌리고 같은 트랜잭션 안에서 갚는 대출입니다. 대출 프로토콜이 상환을 확인하는 방법과 드는 비용, 막히는 지점을 정리했습니다.

읽는 시간 7분 J Tools Editorial
플래시론이 같은 트랜잭션 안에서 닫히는 순간으로, 빌린 100 SOL은 상환되고 지갑은 2.41 SOL 그대로인 플래시 볼륨 작동 방식 패널

솔라나 플래시론은 담보도 신용 조회도 없이 토큰을 빌려주는 대출입니다. 조건은 하나뿐입니다. 트랜잭션이 끝나기 전에 빌린 돈이 돌아와 있어야 합니다. 상환이 빠지거나 실패하면 네트워크가 트랜잭션 전체를 거부하고, 대출은 처음부터 없던 일이 됩니다. 갚지 않은 채 남는 빚이 생길 수 없으니 대출 프로토콜은 어떤 지갑에든 이 대출을 내줄 수 있습니다.

처음 들으면 허점처럼 들립니다. 실제로는 평범한 규칙 두 개가 맞물린 결과입니다. 트랜잭션은 전부 실행되거나 아예 실행되지 않고, 프로그램은 자신이 실행되는 트랜잭션 안의 다른 명령을 읽을 수 있습니다. 솔라나 플래시론이 하는 모든 일은, 막히는 방식까지 포함해 이 두 가지에서 나옵니다.

솔라나 플래시론은 한 트랜잭션 안에서 어떻게 작동할까

솔라나는 트랜잭션을 명령의 목록으로 받아 순서대로 실행합니다. 솔라나 트랜잭션 공식 문서는 규칙을 분명하게 적어 둡니다. 명령 하나라도 실패하면 트랜잭션 전체가 실패하고, 그때까지의 상태 변경은 모두 되돌려집니다. 플래시론은 바로 이 규칙 위에 짜 맞춘 목록입니다.

  1. 빌리기. 대출 프로그램이 자기 금고(vault)에서 내 토큰 계정으로 토큰을 옮깁니다.
  2. 쓰기. 내가 넣은 명령들이 그 토큰을 씁니다. 스왑일 수도, 청산일 수도, 다른 곳에 예치하는 일일 수도 있습니다.
  3. 갚기. 대출 프로그램이 같은 금액을 되가져갑니다. 수수료를 받는 프로토콜이라면 그 수수료도 함께 가져갑니다.

세 번째 단계가 실행되지 못하면, 예를 들어 스왑이 계획보다 적게 돌려주었다면, 첫 번째 단계도 나머지와 함께 취소되고 금고는 시작할 때와 똑같은 상태로 끝납니다. 담보가 필요 없는 이유도 같습니다. 보통의 대출에 담보가 필요한 것은 빌린 순간부터 갚는 순간까지 시간이 흐르기 때문입니다. 여기에는 그런 시간이 전혀 없습니다.

온체인 트랜잭션이 열리고 가장 먼저 100 SOL을 빌린 단계로, 가격과 지갑의 2.41 SOL은 아직 변하지 않은 플래시 볼륨 작동 방식 화면

대출 프로토콜은 상환이 들어올 것을 어떻게 알까

빌리기 명령이 먼저 실행되므로, 상환이 일어나기도 전에 빌려줄지 말지를 정해야 합니다. 그래서 앞을 미리 읽습니다. 솔라나는 실행 중인 트랜잭션의 최상위 명령을 전부 instructions sysvar라는 특수 계정으로 보여 줍니다. 솔라나 명령 인트로스펙션 가이드는 바로 이 쓰임새를 꼽습니다. 특정 명령이 같은 트랜잭션 안에 들어 있는지 확인하는 일입니다.

Kamino Lend는 프로그램 소스를 공개하고 있어서 이 확인 과정을 직접 들여다볼 수 있습니다. Kamino의 플래시 빌리기 명령은 자기 뒤에 오는 명령을 하나도 빠짐없이 훑고, 아래 조건을 모두 갖춘 상환 명령을 정확히 하나 찾지 못하면 빌려주지 않습니다.

  • 상환 명령이 같은 금액을 적습니다.
  • 같은 계정을 같은 순서로 나열합니다.
  • 빌리기 명령의 위치를 되가리킵니다.
  • 뒤에 두 번째 플래시 빌리기가 따라오지 않습니다.

아래 표의 다른 두 프로토콜과 마찬가지로 Kamino도 다른 프로그램 안에서 호출된 빌리기(CPI)는 거절합니다. sysvar가 최상위 명령만 보여 주기 때문입니다. marginfi는 대출의 틀을 조금 다르게 짭니다. 시작 명령이 트랜잭션 뒤쪽에 종료 명령이 있는지 확인하고, 종료 명령이 계정의 건전성 검사를 실행합니다.

세부가 결과를 가릅니다. Kamino의 상환 명령은 빌리기 명령의 위치를 숫자로 들고 다닙니다. 그래서 지갑이 빌리기 앞에 자체 보호 명령을 하나 끼워 넣으면 상환이 엉뚱한 명령을 가리키게 되고, 대출은 거절됩니다. Jupiter Lend의 상환 명령에는 이런 위치 값이 없습니다. 플래시 볼륨 도구가 Jupiter Lend에서 빌리는 이유 가운데 하나가 이것입니다.

플래시론을 제공하는 솔라나 대출 프로토콜

다음 세 대출 프로토콜은 자체 개발자 문서에 솔라나 플래시론을 설명해 두었습니다.

대출 프로토콜 대출 수수료
Jupiter Lend 문서상 없음, 다만 관리자가 수수료 설정을 쥐고 있음
Kamino Lend 리저브마다 따로 정함, 리저브 단위로 플래시론을 끌 수 있음
marginfi (문서는 이제 Project 0 이름으로 제공) 문서상 없음

사람들은 플래시론을 어디에 쓸까

여기 나오는 일은 모두 명령 몇 개가 실행되는 동안만 큰 금액이 필요하고, 그 뒤로는 아무것도 필요하지 않습니다.

  • 차익거래. 토큰이 싼 곳에서 사고 비싼 곳에서 팔아 대출을 갚습니다. 그사이 가격 차이가 닫혔다면 매도 대금이 상환액을 채우지 못하고 트랜잭션은 되돌려집니다.
  • 청산. 대출금으로 건전성이 무너진 차입자의 빚을 갚고, 할인된 가격에 받은 담보를 다시 스왑해 대출을 갚습니다.
  • 담보 교체와 리파이낸싱. 빌린 토큰으로 기존 대출을 갚고, 담보를 인출해 스왑하거나 다른 대출 프로토콜로 옮긴 뒤, 다시 빌려서 갚습니다. 이름 붙은 상품이 아니라 문서로 확인되는 단계를 이어 붙인 흐름입니다.
  • 자기 청산. 내 담보로 직접 빚을 줄이면 청산인이 떼어 갈 프리미엄을 아낄 수 있습니다. Kamino의 담보로 상환하기(repay with collateral) 흐름이 이 일을 합니다.
  • 루핑. 빌리고, 담보 자산으로 스왑하고, 예치하고, 그 담보로 다시 빌려서 갚습니다. Kamino의 Multiply가 이 구조로 돌아갑니다.
  • 거래량. 토큰을 사서 같은 풀에 바로 되팔고, 지갑은 그 왕복에 드는 비용만 냅니다.

마지막 경우가 플래시 볼륨 도구가 하는 일입니다. Jupiter Lend에서 SOL을 빌려 PumpSwap, Raydium, Orca, Meteora 가운데 한 풀에서 내 토큰을 사고, 다시 팔고, 대출을 갚고, 도구 수수료를 내는 과정을 서명 한 번으로 처리합니다. 전체 거래 가격은 지갑이 열리기 전에 먼저 보여 줍니다. 트랜잭션을 읽는 사람은 누구나 한 지갑에서 나온 빌리기, 매수, 매도를 봅니다. 토큰을 계속 들고 있고 싶다면 대신 Jupiter 경로로 토큰을 바꾸는 스왑 도구를 쓰세요.

솔라나 플래시론 한 번에 드는 비용

원금은 비용이 아닙니다. 같은 트랜잭션 안에서 돌아오기 때문입니다. 돈이 드는 쪽은 그 주변의 모든 것입니다.

대출 수수료. Jupiter Lend와 marginfi는 문서에 수수료 없는 플래시론을 적어 두었고, Kamino는 리저브마다 수수료를 정합니다. 다만 Jupiter Lend의 관리자는 지금도 수수료 설정을 바꿀 수 있습니다. 그래서 플래시 볼륨은 대출할 때마다 이 값을 먼저 읽고, 0이 아니면 트랜잭션을 만들지 않습니다.

스왑 수수료와 가격 영향. 대출 안에서 일어나는 스왑은 하나하나 해당 풀의 수수료를 냅니다. 얇은 풀에 큰 금액을 넣으면 가격이 들어갈 때 한 번, 나올 때 또 한 번, 모두 두 번 불리하게 움직입니다. 그 이유는 유동성 풀 깊이가 작동하는 방식에서 볼 수 있습니다. 스왑마다 최소 수령량을 정해 두세요. 상환액이 조금이라도 모자라면 트랜잭션 전체가 가라앉습니다. 그 균형을 어떻게 잡을지는 슬리피지 값을 고르는 방법에서 다룹니다.

네트워크 수수료. 기본 수수료는 서명 하나당 5,000 램포트이고, 여기에 요청한 컴퓨트 유닛마다 값이 매겨지는 우선순위 수수료가 붙습니다. 플래시론은 단순 전송보다 훨씬 많은 컴퓨트를 요청합니다. 금액을 어떻게 정할지는 우선순위 수수료를 얼마나 낼지에 정리되어 있습니다.

실패한 대출은 싸지만 공짜는 아닙니다. 블록에 포함된 뒤 되돌려진 트랜잭션도 네트워크 수수료는 냅니다. 솔라나 문서와 Jupiter의 플래시론 가이드가 모두 그렇게 설명합니다. 반면 시뮬레이션에서 실패해 아예 전송되지 않은 트랜잭션에는 아무 비용도 들지 않습니다.

아무 일도 일어나기 전, 지갑에 2.41 SOL이 있고 100 SOL 사고팔기 버튼을 누르려는 참인 플래시 볼륨 작동 방식 화면

서명하기 전에 시뮬레이션부터 돌려 보세요. 실패할 대출은 시뮬레이션 실패로 먼저 드러나고, 그 시점까지 나간 돈은 하나도 없습니다.

한계: 트랜잭션 크기, 컴퓨트, 대출 프로토콜이 가진 자금

플래시론은 트랜잭션 하나보다 커질 수 없습니다. 이런 대출이 쓰는 v0 트랜잭션은 최대 1,232바이트, 140만 컴퓨트 유닛까지만 담습니다. 빌리기, 상환, 스왑, 그리고 각 명령이 건드리는 계정까지 모두 이 안에 들어가야 합니다. 개발자들이 주소 조회 테이블(address lookup table)에 기대는 이유입니다.

두 트랜잭션에 걸칠 수도 없습니다. sysvar는 지금 실행 중인 트랜잭션만 나열합니다. 그래서 두 번째 트랜잭션에 넣은 상환은 같은 Jito 번들 안에 있더라도 빌리기 명령에는 보이지 않습니다. Jito 번들이 보장하는 것과 아닌 것은 이와 별개의 문제입니다.

그다음은 대출 프로토콜이 실제로 가진 자금입니다. 대출은 금고에서 나가고, 일부 프로토콜은 대출 한 건당 상한을 두며, 대출 자체가 일시 중지될 수도 있습니다. 그래서 빌릴 수 있는 최대 규모는 고정된 상수가 아니라 그때그때 읽어야 하는 값입니다. Kamino와 marginfi는 트랜잭션 하나에 플래시론을 하나만 허용합니다.

위험: 지갑 경고와 오라클 공격

지갑 경고가 뜰 것이라고 예상하세요. Phantom은 트랜잭션을 깔끔하게 시뮬레이션하지 못할 때 경고를 띄우고, 그 원인으로 한도에 가까운 크기와 실패하는 트랜잭션을 꼽습니다. 플래시론은 덩치가 크고, 대출 프로토콜과 DEX를 한꺼번에 호출합니다. 가격이 너무 많이 움직였다면 시뮬레이션이 실패합니다. 지갑이 이 대출은 갚아지지 못한다고 알려 주는 것입니다.

게다가 모든 플래시론은 공개되어 있습니다. 누구나 탐색기에서 트랜잭션을 열어 볼 수 있고, Wallet Scope의 대량 지갑 분석은 그 뒤에 있는 지갑들의 거래와 손익(PnL)을 보여 줍니다.

더 어두운 역사는 다른 프로토콜 쪽에 있습니다. 플래시론 공격은 트랜잭션 하나 안에서 가격을 휘게 만듭니다. 빌린 규모가 얇은 풀을 밀어내고, 그 풀을 가격 피드로 읽는 프로토콜이 뒤틀린 숫자대로 움직이는 방식입니다. Kamino 문서는 시간 가중 가격과 가격 밴드를 방어책으로 설명합니다. 내가 정한 최소 수령량은 큰 스왑을 노리는 샌드위치 공격도 줄여 줍니다.

플래시론, 담보 대출, 마진 비교

플래시론 담보 대출 마진
담보 없음 대출보다 큰 가치 내 예치금과 포지션
유지 기간 트랜잭션 하나 갚을 때까지 계정이 건전한 동안
갚지 못하면 트랜잭션이 되돌려짐 담보가 청산됨 포지션이 청산됨
내는 비용 대출 수수료(받는 곳만), 스왑 수수료와 네트워크 수수료 대출이 열린 동안의 이자 이자와 거래 수수료

담보 대출과 마진은 열려 있는 동안 가격이 움직이므로 시간에 걸친 위험을 떠안습니다. 솔라나 플래시론에는 그 '동안'이 없습니다. 잃을 수 있는 것은 되돌려진 트랜잭션의 수수료, 그리고 내 잔액으로 메워야 하는 거래 손실입니다.

이 글은 플래시론이 작동하는 방식을 설명할 뿐이며 금융, 투자, 법률, 세무 조언이 아닙니다. 대출 안에서 이루어지는 거래는 손실을 낼 수 있고, 대출 프로토콜은 조건을 바꾸거나 대출을 일시 중지할 수 있습니다.

솔라나 플래시론 자주 묻는 질문

솔라나 플래시론은 무료입니까?

대출 자체는 무료일 수 있습니다. Jupiter Lend와 marginfi는 문서에 수수료 없는 플래시론을 적어 두었고, Kamino는 리저브마다 수수료를 정합니다. 그래도 스왑 수수료와 네트워크 수수료, 그리고 사용하는 도구의 수수료는 냅니다.

담보나 신용 조회가 필요합니까?

필요하지 않습니다. 상환이 같은 트랜잭션 안에 있고 성공하기만 하면 됩니다. 다만 지갑에는 네트워크 수수료와, 거래가 남긴 부족분을 메울 SOL이 있어야 합니다.

대출을 갚지 못하면 어떻게 됩니까?

트랜잭션 전체가 거부되고, 빌리기를 포함해 그 안의 모든 변경이 취소됩니다. 블록에 포함된 트랜잭션은 그래도 네트워크 수수료를 내고, 시뮬레이션에서 실패해 전송되지 않은 트랜잭션은 아무것도 내지 않습니다.

두 트랜잭션이나 Jito 번들에 걸쳐 빌릴 수 있습니까?

걸칠 수 없습니다. 대출 프로토콜은 instructions sysvar로 상환을 찾는데, 이 계정은 실행 중인 트랜잭션만 나열합니다. 그래서 다른 곳에 있는 상환은 같은 번들 안에 있어도 인정되지 않습니다.

플래시론은 왜 공격 사례 보고서에 자주 나옵니까?

누구나 트랜잭션 하나 동안 큰 금액을 움직일 수 있게 해 주기 때문입니다. 피해를 본 프로토콜들은 빌린 규모로 움직일 수 있는 얇은 풀의 현물 가격을 그대로 믿었습니다. 시간 평균 가격을 쓰면 이런 공격이 훨씬 어려워집니다.

J
작성자
J Tools Editorial

J Tools 팀에서 작성한 글입니다.

J Tools Editorial의 글 전체 보기 →

관련 글