Flash loan Solana là gì? Cơ chế hoạt động từng bước
Flash loan Solana cho vay không cần thế chấp và phải trả 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 bao giờ có món nợ nào bị bỏ 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 giống 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 thứ một flash loan Solana làm, kể cả những chỗ nó vỡ, đều đế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. Không cần thế chấp cũng vì lẽ đó. 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ó chút thời gian nào như vậy.

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 trượt một điều kiện, lệnh vay từ chối chạy, và theo quy tắc ở phần trên, cả giao dịch dừng lại mà 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 mở kiểm tra rằng có lệnh đóng nằm phía sau trong giao dịch, và lệnh đóng 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 đã mất 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ả. Đây là chuỗi các bước có tài liệu, không phải một sản phẩm có tên riêng.
- 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 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 chìm 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ể lớn hơn 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 người xây dựng phải dựa vào address lookup table. Nói cách khác, cả khoản vay phải gói gọn trong một giao dịch duy nhất.
Nó cũng không thể trả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 được giao dịch một cách sạch sẽ, và nêu kích thước gần giới hạn cùng giao dịch thất bại trong số các nguyên nhân. 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 giao dịch và PnL của những ví đứng sau nó.
Phần lịch sử đen tối thuộc về các giao thức khác. Một cú tấn công bằng flash loan bẻ cong giá ngay trong một giao dịch: quy mô vay được đẩy một pool mỏng, và giao thức nào đọc pool đó làm nguồn giá sẽ hành động theo con số đã méo. Nguồn giá mà một giao thức dựa vào như vậy gọi là oracle, nên kiểu tấn công này còn được gọi 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à lớp 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ế |
| Kéo dài | 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ó trải qua hai giao dịch hay một Jito bundle được 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 nắm một số 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 từ một pool mỏng mà quy mô vay được có thể xê dịch. Giá bình quân theo thời gian khiến việc đó khó hơn nhiều.


