โพสต์ทั้งหมด
คู่มือ

แฟลชโลนบน Solana คืออะไร ทำงานอย่างไร

แฟลชโลนบน Solana ให้ยืมโทเคนโดยไม่ต้องมีหลักประกัน แล้วคืนในธุรกรรมเดียวกัน ผู้ให้กู้ตรวจการคืนเงินอย่างไร มีต้นทุนอะไร และติดขัดตรงไหน

อ่าน 16 นาที J Tools Editorial
แฟลชโลนปิดลงในธุรกรรมเดียวกัน 100 SOL ที่ยืมมาถูกคืนครบ และกระเป๋าเงินยังอยู่ที่ 2.41 SOL ในแผงอธิบายการทำงานของแฟลชวอลุ่ม

แฟลชโลนบน Solana คือการยืมโทเคนโดยไม่ต้องมีหลักประกันและไม่ต้องตรวจเครดิต มีเงื่อนไขเดียวคือเงินต้องกลับมาครบก่อนธุรกรรมจบ ถ้าไม่มีการคืนหรือการคืนล้มเหลว เครือข่ายจะปฏิเสธทั้งธุรกรรม และเงินกู้ก้อนนั้นก็เหมือนไม่เคยเกิดขึ้น ไม่มีหนี้ค้างเหลืออยู่เลยสักครั้ง โปรโตคอลปล่อยกู้จึงเปิดให้กระเป๋าเงินใบไหนก็ได้มายืม

ฟังดูเหมือนช่องโหว่ แต่จริง ๆ คือกฎธรรมดาสองข้อทำงานร่วมกัน ข้อแรก ธุรกรรมหนึ่งสำเร็จทั้งหมดหรือไม่เกิดอะไรเลย ข้อสอง โปรแกรมอ่านคำสั่งอื่นในธุรกรรมที่ตัวเองกำลังรันอยู่ได้ ทุกอย่างที่แฟลชโลนบน Solana ทำ รวมถึงจุดที่มันพัง ล้วนมาจากสองข้อนี้

แฟลชโลนบน Solana ทำงานอย่างไรในธุรกรรมเดียว

Solana รันธุรกรรมเป็นรายการคำสั่งที่เรียงตามลำดับ เอกสารทางการของ Solana เรื่องธุรกรรม เขียนกฎไว้ตรง ๆ ถ้าคำสั่งใดล้มเหลว ธุรกรรมทั้งหมดจะล้มเหลว และการเปลี่ยนสถานะทุกอย่างถูกย้อนกลับ แฟลชโลนก็คือรายการคำสั่งที่สร้างรอบกฎข้อนี้

  1. ยืม โปรแกรมปล่อยกู้โอนโทเคนจากคลัง (vault) ของมันเข้าบัญชีโทเคนของคุณ
  2. ใช้ คำสั่งของคุณเองนำโทเคนไปใช้ จะเป็นสวอป การชำระบัญชี (liquidation) หรือการนำไปฝากที่อื่นก็ได้
  3. คืน โปรแกรมปล่อยกู้ดึงจำนวนเดิมกลับไป บวกค่าธรรมเนียมถ้าผู้ให้กู้รายนั้นเก็บ

ถ้าขั้นที่สามรันไม่ได้ เช่น สวอปคืนเงินมาน้อยกว่าที่วางแผนไว้ ขั้นที่หนึ่งจะถูกยกเลิกไปพร้อมกับทุกอย่าง และคลังของผู้ให้กู้ก็กลับไปอยู่ที่จุดเริ่มต้น เหตุผลเดียวกันนี้อธิบายว่าทำไมไม่ต้องมีหลักประกัน เงินกู้ทั่วไปต้องมีหลักประกันเพราะมีเวลาผ่านไประหว่างวันที่ยืมกับวันที่คืน แต่ตรงนี้ไม่มีเวลาผ่านไปเลย

ธุรกรรมบนเชนเริ่มขึ้น และขั้นแรกคือยืม 100 SOL ขณะที่ราคาและยอด 2.41 SOL ในกระเป๋าเงินยังไม่เปลี่ยน ในแผงอธิบายการทำงานของแฟลชวอลุ่ม

ผู้ให้กู้รู้ได้อย่างไรว่าการคืนเงินจะมาถึง

คำสั่งยืมรันก่อน มันจึงต้องตัดสินใจก่อนที่การคืนจะเกิดขึ้น วิธีของมันคืออ่านล่วงหน้า Solana เปิดให้เห็นคำสั่งระดับบนสุดทุกคำสั่งของธุรกรรมที่กำลังรันผ่านบัญชีพิเศษชื่อ instructions sysvar และคู่มือ instruction introspection ของ Solana ระบุการใช้งานนี้ไว้ตรงตัว คือการตรวจว่ามีคำสั่งหนึ่งอยู่ในธุรกรรมเดียวกัน

Kamino Lend เปิดซอร์สโค้ดโปรแกรมของตัวเอง เราจึงเห็นการตรวจนี้ได้ชัด คำสั่ง flash borrow ของ Kamino ไล่ดูทุกคำสั่งที่อยู่หลังตัวมัน และจะไม่ปล่อยกู้ถ้าหาคำสั่งคืนที่ตรงเงื่อนไขทั้งหมดนี้ไม่เจอแบบพอดีหนึ่งคำสั่ง

  • คำสั่งคืนระบุจำนวนเท่ากับที่ยืม
  • มันแสดงบัญชีชุดเดียวกัน เรียงลำดับเดียวกัน
  • มันชี้กลับไปที่ตำแหน่งของคำสั่งยืม
  • ไม่มี flash borrow ครั้งที่สองตามมา

เช่นเดียวกับผู้ให้กู้อีกสองรายด้านล่าง Kamino ปฏิเสธคำสั่งยืมที่ถูกเรียกจากภายในโปรแกรมอื่น (CPI) เพราะ sysvar แสดงเฉพาะคำสั่งระดับบนสุด ส่วน marginfi วางโครงเงินกู้ต่างออกไป คำสั่งเริ่มต้นตรวจว่ามีคำสั่งปิดอยู่ถัดไปในธุรกรรม และคำสั่งปิดจะรันการตรวจสุขภาพบัญชี

รายละเอียดเล็ก ๆ มีผลมาก คำสั่งคืนของ Kamino เก็บตำแหน่งของคำสั่งยืมไว้เป็นตัวเลข ถ้ากระเป๋าเงินแทรกคำสั่งป้องกันของตัวเองไว้หน้าคำสั่งยืม คำสั่งคืนจะชี้ผิดคำสั่งและถูกปฏิเสธ คำสั่งคืนของ Jupiter Lend ไม่มีตำแหน่งแบบนี้ และนั่นคือเหตุผลหนึ่งที่เครื่องมือแฟลชวอลุ่มเลือกยืมจากที่นั่น

ผู้ให้กู้รายไหนบน Solana มีแฟลชโลน

โปรโตคอลปล่อยกู้สามรายนี้อธิบายแฟลชโลนบน Solana ไว้ในเอกสารสำหรับนักพัฒนาของตัวเอง

ผู้ให้กู้ ค่าธรรมเนียมของผู้ให้กู้
Jupiter Lend ไม่มีตามเอกสาร แต่ผู้ดูแลระบบถือค่าตั้งค่าธรรมเนียมไว้
Kamino Lend กำหนดแยกตาม reserve และแต่ละ reserve ปิดแฟลชโลนได้
marginfi (ตอนนี้เอกสารอยู่ใต้ชื่อ Project 0) ไม่มีตามเอกสาร

คนใช้แฟลชโลนไปทำอะไร

งานทุกแบบในนี้ต้องการเงินก้อนใหญ่แค่ช่วงไม่กี่คำสั่ง และหลังจากนั้นไม่ต้องใช้อะไรอีก

  • อาร์บิทราจ ซื้อโทเคนตรงที่ถูก ขายตรงที่แพง แล้วคืนเงินกู้ ถ้าส่วนต่างปิดไปแล้ว เงินจากการขายจะไม่พอคืน และธุรกรรมย้อนกลับ
  • การชำระบัญชี เงินกู้ใช้จ่ายหนี้ของผู้กู้ที่บัญชีไม่แข็งแรงแล้ว หลักประกันที่ได้มาในราคาลดถูกสวอปกลับ แล้วนำไปคืนเงินกู้
  • สลับหลักประกันและรีไฟแนนซ์ ใช้โทเคนที่ยืมมาคืนเงินกู้เดิม ถอนหลักประกัน สวอปหรือย้ายไปผู้ให้กู้รายอื่น ยืมใหม่ แล้วคืน นี่คือการต่อขั้นตอนที่มีเอกสารรองรับ ไม่ใช่ผลิตภัณฑ์ที่มีชื่อเรียกเฉพาะ
  • ชำระบัญชีตัวเอง ใช้หลักประกันของตัวเองลดหนี้ จะประหยัดส่วนเพิ่มที่ผู้ชำระบัญชีหักไป โฟลว์ repay with collateral ของ Kamino ทำแบบนี้
  • ลูปปิ้ง ยืม สวอปเป็นสินทรัพย์หลักประกัน ฝาก ยืมเพิ่มโดยใช้สิ่งที่ฝากค้ำ แล้วคืน Multiply ของ Kamino ทำงานบนกลไกนี้
  • วอลุ่มการซื้อขาย ซื้อโทเคนแล้วขายคืนในพูลเดียวกัน กระเป๋าเงินจ่ายแค่ต้นทุนของรอบไปกลับ

กรณีสุดท้ายคือสิ่งที่เครื่องมือแฟลชวอลุ่มทำ มันยืม SOL จาก Jupiter Lend ซื้อโทเคนของคุณในพูลเดียวบน PumpSwap, Raydium, Orca หรือ Meteora ขายกลับ คืนเงินกู้ และจ่ายค่าธรรมเนียมของเครื่องมือ ทั้งหมดด้วยลายเซ็นเดียว โดยแสดงราคารวมของการเทรดก่อนกระเป๋าเงินจะเปิดขึ้นมา ใครอ่านธุรกรรมก็เห็นการยืม การซื้อ และการขายจากกระเป๋าเงินใบเดียว ถ้าอยากเก็บโทเคนไว้ ให้ใช้สวอปโทเคนที่หาเส้นทางผ่าน Jupiterแทน

แฟลชโลนบน Solana มีต้นทุนอะไรบ้าง

เงินต้นไม่ใช่ต้นทุน เพราะมันกลับมาในธุรกรรมเดียวกัน สิ่งที่คุณจ่ายจริงคือทุกอย่างที่อยู่รอบ ๆ มัน

ค่าธรรมเนียมของผู้ให้กู้ Jupiter Lend และ marginfi ระบุในเอกสารว่าแฟลชโลนของตนไม่มีค่าธรรมเนียม ส่วน Kamino กำหนดค่าธรรมเนียมแยกตาม reserve ผู้ดูแลระบบของ Jupiter Lend ยังเปลี่ยนค่าตั้งค่าธรรมเนียมได้อยู่ แฟลชวอลุ่มจึงอ่านค่านี้ก่อนกู้ทุกครั้ง และไม่ยอมสร้างธุรกรรมถ้าค่านั้นไม่เป็นศูนย์

ค่าธรรมเนียมสวอปและผลกระทบต่อราคา ทุกสวอปในเงินกู้จ่ายค่าธรรมเนียมของพูลนั้น และเงินก้อนใหญ่ในพูลบางจะดันราคาสวนทางคุณสองรอบ ทั้งตอนเข้าและตอนออก อย่างที่บทความเรื่องความลึกของ liquidity poolอธิบายไว้ ให้ตั้งยอดขั้นต่ำที่ต้องได้รับ (minimum output) ในทุกสวอป เพราะถ้ายอดคืนขาดไปนิดเดียว ทั้งธุรกรรมก็จมไปด้วย การชั่งน้ำหนักเรื่องนี้อยู่ในคู่มือเลือกค่า slippage ให้ถูกกับพูล

ค่าธรรมเนียมเครือข่าย ค่าธรรมเนียมพื้นฐานคือ 5,000 lamport ต่อหนึ่งลายเซ็น บวก priority fee ที่คิดราคาตาม compute unit ที่คุณขอ และแฟลชโลนขอ compute มากกว่าการโอนธรรมดามาก วิธีกำหนดตัวเลขนี้อยู่ในบทความควรจ่าย priority fee เท่าไรถึงพอดี

แฟลชโลนที่ล้มเหลวมีต้นทุนต่ำ แต่ไม่ฟรี ธุรกรรมที่เข้าบล็อกแล้วย้อนกลับยังต้องจ่ายค่าธรรมเนียมเครือข่าย ทั้งเอกสารของ Solana และคู่มือแฟลชโลนของ Jupiter ก็บอกไว้แบบนี้ ส่วนธุรกรรมที่ล้มตั้งแต่ขั้นจำลองและไม่เคยถูกส่งออกไปนั้นไม่มีต้นทุนเลย

ก่อนเริ่มทุกอย่าง กระเป๋าเงินมี 2.41 SOL และกำลังจะกดปุ่มซื้อและขาย 100 SOL ในแผงอธิบายการทำงานของแฟลชวอลุ่ม

จำลองธุรกรรมก่อนเซ็นทุกครั้ง แฟลชโลนที่จะล้มเหลวจะโผล่ให้เห็นเป็นการจำลองที่ไม่ผ่าน และ ณ จุดนั้นคุณยังไม่ได้จ่ายอะไรเลย

ข้อจำกัด ขนาดธุรกรรม compute และเงินที่ผู้ให้กู้มี

แฟลชโลนใหญ่เกินหนึ่งธุรกรรมไม่ได้ ธุรกรรม v0 ที่เงินกู้แบบนี้ใช้รับได้สูงสุด 1,232 ไบต์และ 1,400,000 compute unit ทั้งคำสั่งยืม คำสั่งคืน สวอป และบัญชีทั้งหมดที่เกี่ยวข้องต้องอัดลงในนั้นให้พอดี นักพัฒนาจึงต้องพึ่ง address lookup table

มันยังข้ามสองธุรกรรมไม่ได้ด้วย sysvar แสดงเฉพาะธุรกรรมที่กำลังรัน การคืนเงินที่อยู่ในธุรกรรมที่สองจึงมองไม่เห็นจากฝั่งคำสั่งยืม ต่อให้อยู่ใน Jito bundle เดียวกันก็ตาม ส่วนสิ่งที่ Jito bundle รับประกันจริงเป็นอีกคำถามหนึ่ง

ถัดมาคือเงินที่ผู้ให้กู้มีอยู่จริง เงินกู้ดึงจากคลังของผู้ให้กู้ บางรายตั้งเพดานต่อการกู้หนึ่งครั้ง และการปล่อยกู้อาจถูกหยุดชั่วคราวได้ ขนาดสูงสุดจึงเป็นค่าที่ต้องอ่านเอาในตอนนั้น ไม่ใช่ค่าคงที่ Kamino และ marginfi ยังจำกัดไว้ที่แฟลชโลนเดียวต่อหนึ่งธุรกรรม

ความเสี่ยง คำเตือนจากกระเป๋าเงินและการโจมตีออราเคิล

เตรียมใจไว้ว่าจะเจอคำเตือนจากกระเป๋าเงิน Phantom เตือนเมื่อจำลองธุรกรรมได้ไม่สะอาด และยกขนาดที่ใกล้ขีดจำกัดกับธุรกรรมที่ล้มเหลวเป็นสาเหตุส่วนหนึ่ง แฟลชโลนเป็นธุรกรรมใหญ่ที่เรียกทั้งผู้ให้กู้และ DEX พร้อมกัน ถ้าราคาขยับไปไกลเกินไป การจำลองจะล้ม ซึ่งก็คือกระเป๋าเงินกำลังบอกคุณว่าเงินกู้ก้อนนี้จะคืนไม่ได้

แฟลชโลนทุกรายการยังเป็นข้อมูลสาธารณะ ใครก็เปิดดูธุรกรรมใน explorer ได้ และการวิเคราะห์กระเป๋าเงินแบบกลุ่มของ Wallet Scope แสดงการเทรดและ PnL ของกระเป๋าเงินที่อยู่เบื้องหลัง

ประวัติด้านมืดเป็นของโปรโตคอลอื่น การโจมตีด้วยแฟลชโลนบิดราคาภายในธุรกรรมเดียว ขนาดเงินที่ยืมมาดันพูลบาง ๆ และโปรโตคอลที่อ่านพูลนั้นเป็นแหล่งราคาก็ทำงานตามตัวเลขที่บิดเบี้ยวไปแล้ว เอกสารของ Kamino อธิบายว่าราคาเฉลี่ยถ่วงน้ำหนักตามเวลาและกรอบราคา (price band) คือเกราะป้องกัน ส่วนยอดขั้นต่ำที่คุณตั้งเองก็ช่วยจำกัดการโจมตีแบบแซนด์วิชรอบสวอปก้อนใหญ่ได้ด้วย

แฟลชโลน เงินกู้ทั่วไป และมาร์จิน ต่างกันอย่างไร

แฟลชโลน เงินกู้มีหลักประกัน มาร์จิน
หลักประกัน ไม่มี มูลค่าสูงกว่าเงินกู้ เงินฝากของคุณบวกโพซิชัน
ระยะเวลา หนึ่งธุรกรรม จนกว่าจะคืน ตราบที่บัญชียังแข็งแรง
ถ้าไม่จ่าย ธุรกรรมย้อนกลับ หลักประกันถูกชำระบัญชี โพซิชันถูกชำระบัญชี
สิ่งที่คุณจ่าย ค่าธรรมเนียมผู้ให้กู้ถ้ามี ค่าสวอป และค่าเครือข่าย ดอกเบี้ยระหว่างที่ยังเปิดอยู่ ดอกเบี้ยบวกค่าธรรมเนียมเทรด

เงินกู้มีหลักประกันและมาร์จินแบกความเสี่ยงตามเวลา เพราะราคาขยับได้ตลอดช่วงที่ยังเปิดอยู่ แฟลชโลนบน Solana ไม่มีคำว่า "ระหว่างนั้น" สิ่งที่คุณเสียได้คือค่าธรรมเนียมของธุรกรรมที่ย้อนกลับ บวกผลขาดทุนจากการเทรดที่ยอดคงเหลือของคุณต้องจ่ายเอง

บทความนี้อธิบายการทำงานของแฟลชโลน ไม่ใช่คำแนะนำทางการเงิน การลงทุน กฎหมาย หรือภาษี การเทรดภายในเงินกู้ขาดทุนได้ และผู้ให้กู้เปลี่ยนเงื่อนไขหรือหยุดปล่อยกู้ชั่วคราวได้

คำถามที่พบบ่อยเกี่ยวกับแฟลชโลน

แฟลชโลนบน Solana ฟรีไหม

ตัวเงินกู้ฟรีได้ Jupiter Lend และ marginfi ระบุในเอกสารว่าแฟลชโลนของตนไม่มีค่าธรรมเนียม ส่วน Kamino กำหนดค่าธรรมเนียมแยกตาม reserve แต่คุณยังต้องจ่ายค่าสวอป ค่าธรรมเนียมเครือข่าย และค่าธรรมเนียมของเครื่องมือที่ใช้

ต้องมีหลักประกันหรือตรวจเครดิตไหม

ไม่ต้อง การคืนเงินแค่ต้องอยู่ในธุรกรรมเดียวกันและทำงานสำเร็จ แต่กระเป๋าเงินของคุณยังต้องมี SOL ไว้จ่ายค่าธรรมเนียมเครือข่าย และจ่ายส่วนที่ขาดถ้าการเทรดทิ้งส่วนต่างไว้

ถ้าคืนเงินกู้ไม่ได้จะเกิดอะไรขึ้น

ทั้งธุรกรรมถูกปฏิเสธ และทุกการเปลี่ยนแปลงข้างในถูกยกเลิก รวมทั้งการยืมด้วย ธุรกรรมที่เข้าบล็อกแล้วยังจ่ายค่าธรรมเนียมเครือข่าย ส่วนธุรกรรมที่ล้มตั้งแต่ขั้นจำลองและไม่ถูกส่งออกไปไม่ต้องจ่ายอะไร

แฟลชโลนข้ามสองธุรกรรมหรือ Jito bundle ได้ไหม

ไม่ได้ ผู้ให้กู้หาการคืนเงินผ่าน instructions sysvar ซึ่งแสดงเฉพาะธุรกรรมที่กำลังรัน การคืนเงินที่อยู่ที่อื่นจึงไม่นับ ต่อให้อยู่ใน bundle เดียวกันก็ตาม

ทำไมแฟลชโลนถึงโผล่ในรายงานเหตุโจมตีโปรโตคอล

เพราะมันให้ใครก็ได้คุมเงินก้อนใหญ่ได้ตลอดหนึ่งธุรกรรม โปรโตคอลที่ถูกเจาะคือโปรโตคอลที่เชื่อราคา spot จากพูลบาง ๆ ซึ่งขนาดเงินที่ยืมมาขยับได้ ราคาเฉลี่ยตามเวลาทำให้การโจมตีแบบนั้นยากขึ้นมาก

J
ผู้เขียน
J Tools Editorial

โพสต์จากทีม J Tools

ดูโพสต์ทั้งหมดของ J Tools Editorial →

โพสต์ที่เกี่ยวข้อง