Flash loan Solana là gì? Cơ chế hoạt động từng bước
Flash loan Solana là khoản vay không cần thế chấp, phải trả ngay trong cùng giao dịch. Bên cho vay kiểm tra khoản trả ra sao, tốn phí gì, giới hạn ở đâu.

Flash loan Solana là khoản vay token không cần thế chấp, không cần xét tín dụng, với đúng một điều kiện: số token đã vay phải quay về trước khi giao dịch kết thúc. Nếu khoản trả bị thiếu hoặc thất bại, mạng từ chối cả giao dịch và khoản vay coi như chưa từng tồn tại.
Không có khoản nợ nào bị treo lại, nên giao thức cho vay có thể mở loại vay này cho bất kỳ ví nào. Nghe như một kẽ hở. Thật ra đó chỉ là hai quy tắc bình thường chạy cùng nhau: một giao dịch hoặc chạy trọn, hoặc không chạy gì cả, và một chương trình đọc được các lệnh khác trong chính giao dịch nó đang chạy.
Mọi việc một flash loan Solana làm được, kể cả những cách nó thất bại, đều bắt nguồn từ hai điều đó.
Flash loan Solana hoạt động thế nào trong một giao dịch
Solana chạy một giao dịch như một danh sách lệnh (instruction), theo đúng thứ tự. Tài liệu về giao dịch của Solana nói thẳng quy tắc: nếu bất kỳ lệnh nào thất bại, cả giao dịch thất bại và mọi thay đổi trạng thái đều bị hoàn tác. Một flash loan là danh sách được dựng quanh đúng quy tắc đó.
- Vay. Chương trình cho vay chuyển token từ kho (vault) của nó sang tài khoản token của bạn.
- Dùng. Các lệnh của chính bạn tiêu số token đó: một lệnh swap, một lần thanh lý, một khoản gửi vào nơi khác.
- Trả. Chương trình cho vay lấy lại đúng số đã cho vay, cộng phí nếu bên đó có thu.
Cả ba bước nằm trong cùng một giao dịch, nên chúng thành công cùng nhau hoặc thất bại cùng nhau.
Nếu bước ba không chạy được, chẳng hạn vì một lệnh swap trả về ít hơn dự tính, bước một bị hoàn tác cùng mọi thứ khác và kho của bên cho vay trở về đúng như lúc đầu. Cũng vì thế mà không cần thế chấp. Một khoản vay thông thường cần thế chấp vì có thời gian trôi qua giữa lúc vay và lúc trả. Ở đây không có khoảng thời gian nào như thế.

Bên cho vay biết khoản trả sẽ đến bằng cách nào
Lệnh vay chạy trước, nên nó phải quyết định trước khi khoản trả diễn ra. Cách của nó là đọc trước. Solana để mọi lệnh cấp cao nhất của giao dịch đang chạy hiện ra qua một tài khoản đặc biệt tên là instructions sysvar, và hướng dẫn instruction introspection của Solana nêu đúng cách dùng này: kiểm tra xem một lệnh cụ thể có nằm trong cùng giao dịch hay không.
Kamino Lend công khai mã nguồn chương trình, nên ai cũng thấy được phép kiểm tra này. Lệnh flash borrow của Kamino rà qua mọi lệnh đứng sau nó và từ chối cho vay nếu không tìm được đúng một lệnh trả khớp các điều kiện sau:
- lệnh trả ghi cùng một số tiền;
- nó liệt kê cùng các tài khoản, theo cùng thứ tự;
- nó trỏ ngược về vị trí của lệnh vay;
- không có lệnh flash borrow thứ hai nào theo sau.
Chỉ cần một điều kiện không khớp, lệnh vay từ chối chạy, và theo quy tắc nêu ở phần trên, cả giao dịch dừng lại, không có token nào rời khỏi kho.
Giống hai bên cho vay còn lại trong bảng bên dưới, Kamino từ chối lệnh vay được gọi từ bên trong một chương trình khác (CPI), vì sysvar chỉ liệt kê lệnh cấp cao nhất. marginfi dựng khoản vay theo cách khác: một lệnh bắt đầu kiểm tra rằng có lệnh kết thúc nằm phía sau trong giao dịch, và lệnh kết thúc chạy bước kiểm tra sức khỏe của tài khoản.
Chi tiết nhỏ quyết định nhiều thứ. Lệnh trả của Kamino mang vị trí của lệnh vay dưới dạng một con số. Vì thế, nếu ví chèn một lệnh bảo vệ của riêng nó vào trước lệnh vay, lệnh trả sẽ trỏ nhầm sang lệnh khác và bị từ chối. Lệnh trả của Jupiter Lend không mang vị trí nào, và đó là một trong những lý do công cụ Flash Volume vay ở đó.
Bên cho vay nào cung cấp flash loan Solana
Ba giao thức cho vay sau mô tả flash loan trên Solana trong tài liệu dành cho nhà phát triển của chính họ.
| Bên cho vay | Phí của bên cho vay |
|---|---|
| Jupiter Lend | Không có theo tài liệu, dù admin vẫn giữ một thiết lập phí |
| Kamino Lend | Đặt riêng cho từng reserve; một reserve có thể tắt flash loan |
| marginfi (tài liệu nay nằm dưới tên Project 0) | Không có theo tài liệu |
Người ta dùng flash loan để làm gì
Mọi việc dưới đây đều cần một số tiền lớn trong vài lệnh và không cần gì sau đó.
- Arbitrage. Mua ở nơi token rẻ, bán ở nơi token đắt, rồi trả. Nếu khoảng chênh đã đóng lại, tiền bán không đủ trả và giao dịch bị revert.
- Thanh lý. Khoản vay trả nợ cho một người vay có tài khoản đã xuống dưới ngưỡng an toàn; tài sản thế chấp nhận về với giá chiết khấu được swap ngược lại để trả khoản vay.
- Đổi tài sản thế chấp và tái cấp vốn. Dùng token vay được để trả một khoản vay cũ, rút tài sản thế chấp, swap nó hoặc chuyển sang bên cho vay khác, vay lại, rồi trả.
- Tự thanh lý. Dùng chính tài sản thế chấp của mình để giảm nợ giúp giữ lại khoản thưởng mà người thanh lý lẽ ra sẽ lấy. Luồng repay with collateral của Kamino làm đúng việc này.
- Looping. Vay, swap sang tài sản thế chấp, gửi vào, vay tiếp dựa trên khoản vừa gửi, rồi trả. Multiply của Kamino chạy trên cơ chế này.
- Volume giao dịch. Mua một token rồi bán lại trong cùng pool; ví chỉ trả chi phí của vòng đi và về.
Trường hợp cuối là việc công cụ Flash Volume làm: vay SOL từ Jupiter Lend, mua token của bạn trên bonding curve của Pump.fun hoặc trong một pool trên PumpSwap, Raydium, Orca hoặc Meteora, bán lại, trả khoản vay và trả phí của công cụ, tất cả bằng một chữ ký, với tổng giá của lệnh hiện ra trước khi ví mở.
Ai đọc giao dịch cũng thấy một lệnh vay, một lệnh mua và một lệnh bán từ cùng một ví. Muốn giữ token lại thì hãy dùng swap token qua route của Jupiter thay cho cách này.
Một flash loan Solana tốn những khoản gì
Tiền gốc không phải là chi phí, vì nó quay về ngay trong cùng giao dịch. Thứ bạn trả là mọi thứ xung quanh nó, gồm ba nhóm: phí của bên cho vay, phí swap cùng tác động giá, và phí mạng.
Phí của bên cho vay. Jupiter Lend và marginfi ghi trong tài liệu rằng flash loan của họ không thu phí, còn Kamino đặt phí riêng cho từng reserve. Admin của Jupiter Lend vẫn có thể đổi thiết lập phí, nên Flash Volume đọc giá trị này trước mỗi khoản vay và từ chối dựng giao dịch nếu nó khác 0.
Phí swap và tác động giá. Mỗi lệnh swap trong khoản vay đều trả phí của pool đó, và một số tiền lớn đi vào một pool mỏng sẽ đẩy giá ngược hướng bạn hai lần, lúc vào và lúc ra, như bài cách đọc độ sâu của pool thanh khoản cho thấy.
Hãy đặt mức nhận tối thiểu (minimum output) cho từng lệnh swap, vì chỉ cần khoản trả hụt một chút là cả giao dịch thất bại theo. Bài chọn mức trượt giá phù hợp bàn về sự đánh đổi này.
Phí mạng. Phí cơ bản là 5.000 lamport cho mỗi chữ ký, cộng với priority fee (phí ưu tiên) tính theo từng compute unit bạn yêu cầu, và một flash loan yêu cầu nhiều compute hơn hẳn một lệnh chuyển token thông thường. Bài nên trả priority fee bao nhiêu giải thích cách chọn mức phí này.
Một khoản vay thất bại thì rẻ, nhưng không miễn phí: giao dịch đã vào block rồi bị revert vẫn trả phí mạng, như tài liệu của Solana và hướng dẫn flash loan của Jupiter đều nói. Giao dịch hỏng ngay ở bước mô phỏng và không bao giờ được gửi đi thì không tốn gì.

Hãy mô phỏng trước khi ký. Một flash loan Solana sắp thất bại sẽ lộ ra thành một lần mô phỏng thất bại, và tới lúc đó bạn chưa mất gì cả.
Giới hạn: kích thước giao dịch, compute và vốn của bên cho vay
Một flash loan Solana không thể vượt quá giới hạn của một giao dịch. Các giao dịch v0 mà loại vay này dùng chứa tối đa 1.232 byte và 1.400.000 compute unit. Lệnh vay, lệnh trả, các lệnh swap và mọi tài khoản đi kèm đều phải vừa trong đó, nên các nhà phát triển thường dựa vào address lookup table.
Nó cũng không thể kéo dài qua hai giao dịch. Sysvar chỉ liệt kê giao dịch đang chạy, nên một khoản trả nằm ở giao dịch thứ hai là vô hình với lệnh vay, kể cả khi cả hai nằm trong cùng một Jito bundle. Jito bundle bảo đảm những gì là một câu hỏi khác.
Tiếp theo là số vốn bên cho vay đang giữ. Khoản vay rút từ kho của họ, một số bên đặt mức trần cho mỗi khoản vay, và việc cho vay có thể bị tạm dừng, nên quy mô tối đa là con số phải đọc tại thời điểm đó chứ không phải hằng số. Kamino và marginfi còn chỉ cho phép một flash loan trong mỗi giao dịch.
Rủi ro: cảnh báo của ví và tấn công oracle
Hãy chuẩn bị tinh thần gặp cảnh báo từ ví. Phantom cảnh báo khi không mô phỏng trọn vẹn được giao dịch, và trong các nguyên nhân nó nêu có kích thước sát giới hạn và giao dịch thất bại. Một flash loan vừa lớn vừa gọi cả bên cho vay lẫn một DEX cùng lúc. Khi giá đã chạy quá xa, lần mô phỏng thất bại, và đó là cách ví báo cho bạn biết khoản vay sẽ không trả được.
Mọi flash loan Solana cũng đều công khai. Ai cũng mở được giao dịch trên explorer, và phân tích ví hàng loạt của Wallet Scope cho thấy các lệnh mua bán và PnL của những ví đứng sau nó.
Những vụ tấn công bằng flash loan trong lịch sử xảy ra ở các giao thức khác. Một cú tấn công kiểu này bẻ cong giá ngay trong một giao dịch: số tiền vay lớn đẩy lệch giá của một pool mỏng, và giao thức nào lấy pool đó làm nguồn giá sẽ hành động theo con số đã bị bóp méo. Nguồn giá mà giao thức dựa vào gọi là oracle, vì vậy người ta cũng gọi đây là tấn công oracle.
Tài liệu của Kamino mô tả giá bình quân theo thời gian và dải giá (price band) là cách phòng thủ. Mức nhận tối thiểu của chính bạn cũng hạn chế được tấn công sandwich quanh một lệnh swap lớn.
Flash loan, khoản vay thông thường và margin khác nhau thế nào
Bảng dưới đặt flash loan cạnh hai kiểu vay quen thuộc hơn trong DeFi, theo bốn tiêu chí: thế chấp, thời hạn, chuyện gì xảy ra khi không trả, và bạn phải trả những gì.
| Flash loan | Vay có thế chấp | Margin | |
|---|---|---|---|
| Thế chấp | Không có | Giá trị cao hơn khoản vay | Tiền gửi của bạn cộng vị thế |
| Thời hạn | Một giao dịch | Tới khi bạn trả | Chừng nào tài khoản còn an toàn |
| Nếu không trả | Giao dịch bị revert | Tài sản thế chấp bị thanh lý | Vị thế bị thanh lý |
| Bạn trả | Phí bên cho vay nếu có, phí swap và phí mạng | Lãi trong lúc khoản vay còn mở | Lãi cộng phí giao dịch |
Vay có thế chấp và margin mang rủi ro theo thời gian, vì giá chạy trong lúc chúng còn mở. Một flash loan Solana không có chữ "trong lúc": thứ bạn có thể mất là phí của một giao dịch bị revert, cộng với khoản lỗ giao dịch mà số dư của chính bạn phải bù.
Bài viết này giải thích cách flash loan hoạt động, không phải lời khuyên tài chính, đầu tư, pháp lý hay thuế. Các lệnh giao dịch bên trong một khoản vay có thể lỗ, và bên cho vay có thể đổi điều khoản hoặc tạm dừng cho vay.
Câu hỏi thường gặp về flash loan Solana
Flash loan Solana có miễn phí không?
Bản thân khoản vay có thể miễn phí: Jupiter Lend và marginfi ghi trong tài liệu rằng flash loan của họ không thu phí, còn Kamino đặt phí riêng cho từng reserve. Bạn vẫn trả phí swap, phí mạng và phí của công cụ bạn dùng.
Có cần tài sản thế chấp hay xét tín dụng không?
Không. Khoản trả chỉ cần nằm trong cùng giao dịch và chạy thành công. Ví của bạn vẫn cần SOL để trả phí mạng và bù phần thiếu mà các lệnh giao dịch để lại.
Chuyện gì xảy ra nếu khoản vay không trả được?
Cả giao dịch bị từ chối và mọi thay đổi bên trong bị hoàn tác, kể cả lệnh vay. Giao dịch đã vào block vẫn trả phí mạng; giao dịch hỏng ở bước mô phỏng và chưa bao giờ được gửi thì không trả gì.
Flash loan có thể kéo dài qua hai giao dịch hoặc một Jito bundle không?
Không. Bên cho vay tìm khoản trả qua instructions sysvar, thứ chỉ liệt kê giao dịch đang chạy, nên một khoản trả nằm ở chỗ khác không được tính, kể cả trong cùng bundle.
Vì sao flash loan hay xuất hiện trong các báo cáo tấn công?
Vì nó cho bất kỳ ai điều động một khoản tiền lớn trong phạm vi một giao dịch. Các vụ tấn công nhắm vào những giao thức tin vào giá giao ngay của một pool mỏng mà số tiền vay đủ sức xê dịch. Giá bình quân theo thời gian khiến việc đó khó hơn nhiều.


