Web3 คำเตือนเกี่ยวกับความปลอดภัย | การวิเคราะห์เหตุการณ์การโจมตี Sonne Finance ที่สูญเสียมูลค่าสูงถึง 20 ล้านเหรียญสหรัฐ

เมื่อวันที่ 15 พฤษภาคม พ.ศ. 2024 Sonne Finance ประสบกับการโจมตี Optimism on-chain โดยขาดทุนสูงถึง $2 k 0000

หลังจากเกิดการโจมตี ผู้ใช้ @tonyke_bot บน X ได้โพสต์ทวีตกล่าวว่าเขาได้ปกป้องกองทุนที่มีค่าประมาณ 100 ดอลลาร์ของ Sonne Finance (ที่เรียกว่า market ซึ่งคล้ายกับ cToken ใน Compound) ที่เหลืออยู่ประมาณ 6.5 ล้านดอลลาร์

\_bot/status/1790547461611860182

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

หลังจากค้นพบการโจมตีทีมโครงการ Sonne Finance ได้ระงับตลาดทั้งหมดอย่างรวดเร็วในแง่ดีและกล่าวว่าตลาดบน Base นั้นปลอดภัย

(**)

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

บรรยายสรุปการโจมตี

Sonne Finance เป็นโปรโตคอลการยืมในรูปแบบเดียวกับ Compound V2 บน Optimism ที่ให้บริการทางการเงินให้แก่บุคคลทั่วไป สถาบันการเงิน และโปรโตคอล Sonne Finance รวบรวมสินทรัพย์โทเค็นของผู้ใช้เข้าด้วยกันเพื่อสร้างสรรค์พูลเหลืองยืมให้แก่ผู้ใช้ เช่นเดียวกับธนาคาร ผู้เข้าร่วมโปรโตคอลสามารถจำนองโทเค็นที่เขาถือครองเข้าสู่พูลเหลืองยืมเงินของ Sonne Finance พร้อมทั้งได้รับใบรับรอง soToken (เช่นเดียวกับ cToken) soToken เป็นสินทรัพย์ที่ให้ผลตอบแทน โดยได้รับผลตอบแทนจากการเลื่อนบล็อกและได้รับการส่งเสริมด้วย SONNE token นอกจากนี้ผู้เข้าร่วมโปรโตคอลยังสามารถยืมสินทรัพย์อื่นๆ จากพูลทรัพย์ยืมของ Sonne ได้ เช่นผู้เข้าร่วมโปรโตคอลสามารถจำนอง USDC เพื่อรับ soUSDC แล้วยืม WETH เพื่อการหมุนเวียนขั้นตอนถัดไป การจำนองและการยืมในโปรโตคอล Sonne Finance สามารถมีการจำนองและการยืมในรูปแบบหลายต่อหลายสินทรัพย์ ในขั้นตอนการจำนองและการยืม โปรโตคอลจะคำนวณอัตราส่วนความสมบูรณ์ของที่อยู่ของผู้เข้าร่วม (Health Factor) เมื่อค่า Health Factor ต่ำกว่า 1 ที่อยู่จะถูกล้างล้าง และผู้ล้างอาจได้รับรางวัลจากกระบวนการล้างได้

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

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

ในสูตรข้างต้น totalCash หมายถึงจํานวนโทเค็นอ้างอิงที่ถือโดย soToken, totalBorrows หมายถึงจํานวนโทเค็นอ้างอิงที่ให้ยืมในตลาด totalReserves หมายถึงจํานวนทุนสํารองทั้งหมด (รวมถึงดอกเบี้ยที่จ่ายโดยผู้กู้) และ totalSupply หมายถึงจํานวนการสร้าง soTokens

เมื่อแลกผู้ใช้สามารถระบุจํานวนโทเค็นอ้างอิงที่จะไถ่ถอน redeemAmount เพื่อคํานวณจํานวน soTokens ที่ต้องเผา redeemTokens วิธีการคํานวณคร่าวๆ "redeemTokens = redeemAmount / exchangeRat", **โปรดทราบว่าไม่มีการประมวลผลการสูญเสียความแม่นยําที่นี่ **

การโจมตีครั้งนี้เกิดจากการสร้างตลาด (soToken) เมื่อผู้โจมตีดำเนินการด้วยการสร้างเหรียญทุนต่ำของ underlying token และ soToken จำนวนน้อย ทำให้ค่า "totalSupply" ของ soToken น้อยเกินไป ผู้โจมตีจากนั้นใช้ช่องโหว่การสูญเสียความแม่นยำของสัญญา Solidity โดยส่ง underlying token โดยตรงไปยังสัญญา soToken (ที่ไม่ได้สร้าง soToken นั่นหมายความว่า "totalSupply" ยังคงเดิมแต่ "totalCash" เพิ่มขึ้น) โดยไม่ใช้วิธีการมัดจำ + การสร้างเหรียญ underlying token ดังกล่าวทำให้ค่าตัวแปร "totalCash" ในสัญญาเพิ่มขึ้น แต่ "totalSupply" คงที่ ซึ่งทำให้ exchangeRate เพิ่มขึ้น ผู้โจมตีสุดท้ายจึงสามารถใช้ soToken ที่ได้รับกำไรไปยืม underlying token WETH, USDC จาก soToken อื่น (เช่น soWETH, soUSDC) และสุดท้ายได้กำไรสูงถึง 20 ล้านดอลลาร์

**ที่อยู่ที่สําคัญที่เกี่ยวข้องกับการโจมตี

การซื้อขายพร้อมโจมตี:

\u003e > ** > >

การโจมตีการซื้อขายที่ทํากําไร:

> > \u003e > ** \u003e \u003e

โจมตีที่อยู่ที่เกี่ยวข้องกับ EOA:

> \u003e

0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb \u003e >

\u003e > \u003e 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43 \u003e >

ที่อยู่ที่เกี่ยวข้องกับผู้โจมตี (สัญญา):

\u003e

\u003e 0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8

>

\u003e 0x02fa2625825917e9b1f8346a465de1bbc150c5b9 > สวัสดี \u003e

โทเค็นอ้างอิง (VELO Token V2):

\u003e

0x9560e827af36c94d2ac33a39bce1fe78631088db \u003e >

漏洞合約(soVELO,類似於 Compound 的 cToken):

\u003e \u003e

0xe3b81318b1b6776f0877c3770afddff97b9f5fe5 \u003e

X 上 @tonyke_bot ผู้ใช้เรียกคืนธุรกรรมช่วยเหลือ

> ข้อความที่ต้องการแปล > **

\u003e

วิเคราะห์กระบวนการโจมตี

สรุปเนื้อหาก่อนหน้า

(Note: The translation might vary depending on the context. This is a general translation.)

Sonne Finance ผู้วางโครงการเร็ว ๆ นี้ได้รับการอนุมัติในข้อเสนอที่จะเพิ่ม VELO market ไปยัง Sonne Finance () และได้จัดการธุรกรรม 5 ครั้งที่จะดำเนินการหลังจาก 2 วัน (), ธุรกรรมเหล่านี้ใช้สำหรับสร้าง VELO market (soVELO contract) และตั้งค่าการกำหนดค่าสำคัญต่าง ๆ ของตลาดนั้น เช่น การตั้งรูปแบบอัตราดอกเบี้ย, การตั้งค่าเครื่องทำนายราคา, ตั้งค่าปัจจัยการหลักประกัน ฯลฯ หลังจากการสร้าง VELO market เสร็จสิ้น ผู้ใช้สามารถฝากเหรียญ VELO เพื่อผลิตเหรียญ soVELO ต่อไป และเหรียญ soVELO สามารถใช้ในการกู้ยืม soToken อื่น ๆ

เตรียมการโจมตี

การเตรียมการโจมตีหลักคือเมื่อผู้โจมตีสร้าง VELO market (โดยใช้สัญญา soVELO) ตามข้อมูลในข้อเสนอโครงการของ Sonne Finance หลังจากสิ้นสุดระยะเวลาล็อกของข้อเสนอสองวัน ผู้โจมตีจะตั้งค่าการตั้งค่าสำคัญและกำหนดรายการ VELO โทเค็นเข้าสู่สัญญา soVELO เพื่อสร้างเหรียญ soVELO ในขณะเดียวกัน ผู้โจมตียังจะเพิ่ม exchangeRate โดยการส่งโทเค็น VELO ที่ถืออยู่โดยตรงไปยังสัญญา soVELO เป็นการเตรียมการเพื่อทำกำไรจากการโจมตีในอนาคต

具体步骤如下:

  1. หลังจากผู้โจมตีได้ระยะเวลาล็อกไปสองวันแล้ว เขาจะเริ่มต้นจัดห่วงโจมตีโดยการรวมการดำเนินการของการซื้อขายที่สี่รายการแรกในข้อเสนอในธุรกรรมเดียวกัน (ธุรกรรม 0x45c0cc) ซึ่งจะถูกใช้ในการสร้าง VELO market (เป็นสัญญา soVELO) และตั้งค่าการกำหนดค่าที่สำคัญไว้ให้เรียบร้อย VELO market จะถูกกำหนดค่าเริ่มต้นเป็น "200,000,000,000,000,000,000,000,000" exchangeRate
  2. ผู้โจมตีเรียกใช้ฟังก์ชัน "mint" ในสัญญา soVELO เพื่อเก็บเงินสดตัวแทน VELO และสร้างสัญญา soVELO ผู้โจมตีระบุ "mintAmount" เป็น "400,000,001" (จำนวนเหรียญ VELO) จากฟังก์ชัน "exchangeRateStoredInternal" สามารถเห็นได้ว่า ณ จุดนี้ soVELO มี " \_totalSuppl " เท่ากับ 0 ดังนั้น exchangeRate คือค่าที่ตั้งไว้ในขั้นตอนที่ 1 ตามสูตร "mintTokens = actualMintAmount / exchangeRate" จะได้ว่า จำนวนเหรียญ soVELO ที่ควรสร้างในขั้นตอนนี้คือ 2 รวมกัน สรุปคือ ในขั้นตอนนี้ ผู้โจมตีฝากเหรียญ VELO ในค่า "400,000,001" และได้รับ soVELO จำนวน 2

soVELO.mint:

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析 3. ผู้โจมตีใช้วิธีการส่งโทเค็น VELO โดยตรงไปยังสัญญา soVELO และส่งโทเค็น VELO ที่มีค่าเป็น "2,552,964,259,704,265,837,526" ไปยังสัญญา soVELO ซึ่งทำให้โทเค็น VELO ที่ถือครองโดยสัญญา soVELO เพิ่มขึ้น แต่เนื่องจากไม่มีการสร้างโทเค็น soVELO ใหม่ จึงทำให้ totalSupply คงที่ ซึ่งหมายความว่า exchangeRate ที่คำนวณจากสูตร exchangeRate ก็จะเพิ่มขึ้น 4. ผู้โจมตีโอนโทเค็น soVELO ที่ถืออยู่ไปหลายครั้งและสุดท้ายโอนให้กับ EOA โจมตีอื่น 0xae4a

โจมตีเพื่อทํากําไร

ผลประโยชน์จากการโจมตีในขั้นตอนนี้ส่วนใหญ่คือการดำเนินการธุรกรรมที่ห้าของผู้โจมตีและใช้กู้ยืมสินทรัพย์ VELO โดยตรงจากสัญญา soVELO เพื่อเพิ่ม exchangeRate ต่อไป ต่อมาผู้โจมตีใช้สินทรัพย์ soVELO ที่มีค่าเป็น 2 ต่อไปยังสัญญา soToken อื่น ๆ (เช่น soWETH, soUSDC เป็นต้น) เพื่อกู้ยืม WETH, USDC และสินทรัพย์ใต้เครื่องหมายเงินตราอื่น ๆ ส่วนเหลือเป็นส่วนที่ผู้โจมตีได้รับกำไร ต่อมาผู้โจมตีไปไปเปลี่ยนคืนสินทรัพย์ใต้เครื่องหมายเงินตราของตัวเองจากสัญญา soVELO โดยเนื่องจาก exchangeRate เพิ่มขึ้นและปัญหาการสูญเสียความแม่นยำในการคำนวณจำนวน soVELO ที่ต้องทำลายเมื่อได้รับค่าสินทรัพย์ใต้เครื่องหมายเงินตรา ผู้โจมตีสามารถแลกคืนสินทรัพย์ VELO เกือบทั้งหมดที่ฝากไว้ก่อนหน้านี้โดยใช้ soVELO ที่มีค่าเป็น 1 เท่านั้น สามารถอธิบายได้ว่าผู้โจมตีได้ใช้ soVELO ที่มีค่าเป็น 1 จำนวนมากเพื่อสร้างกำไรจากการยืมเงินจาก soToken อื่น ๆ เช่น WETH, USDC เป็นต้น ผู้โจมตีทำซ้ำกระบวนการโจมตีด้วยวิธีเดียวกันหลายครั้งเพื่อกำไรมหาศาล

ขั้นตอนที่แน่นอนคือดังนี้:

  1. ผู้โจมตีดำเนินการธุรกรรมที่ห้าในคดีนั้นโดยตั้งค่าตัวประกอบการกู้ยืมตามที่ระบุในข้อกำหนดของข้อเสนอแนะ
  2. ผู้โจมตียืม VELO โทเค็นจำนวน "35,469,150,965,253,049,864,450,449" จากพูล VolatileV2 AMM - USDC/VELO โดยเร็วและรวดเร็ว ซึ่งจะกระตุ้นฟังก์ชัน hook ของผู้โจมตี ในฟังก์ชัน hook ผู้โจมตีจะดำเนินการโจมตีต่อไป
  3. ผู้โจมตีส่งโทเค็น VELO ที่ถืออยู่ไปยังสัญญา soVELO เพื่อเพิ่ม exchangeRate อีกเพิ่มขึ้น ณ ขณะนี้ในสัญญา soVELO มีโทเค็น VELO ทั้งหมดอยู่ที่จำนวนค่า "35,471,703,929,512,754,530,287,976" (รวม VELO ที่โจมตีส่งเข้าสัญญาทั้งสิ้นสามครั้ง)
  4. ผู้โจมตีสร้างสัญญาใหม่ 0xa16388a6210545b27f669d5189648c1722300b8b และในฟังก์ชันกำหนดค่าจะโอนเหรียญ soVELO 2 ตัวที่ถืออยู่ให้กับสัญญาใหม่ที่สร้างขึ้น 0xa163 (เรียกว่า 0xa163 ผู้โจมตี)
  5. ผู้โจมตี 0xa163 ให้ยืม WETH ด้วยมูลค่า "265,842,857,910,985,546,929" จาก soWETH Token ที่ถืออยู่
  6. ในการโจมตี 0xa163 เรียกใช้ฟังก์ชัน "redeemUnderlying" ใน soVELO โดยระบุจำนวนเงิน VELO ที่ต้องการแลกเปลี่ยนเป็น "35,471,603,929,512,754,530,287,976" (เกือบทั้งหมดจำนวนเงิน VELO ที่โจมตีเคยโอนหรือจำนองให้กับสัญญา soVELO) ในขณะนี้ต้องคำนวณจำนวน soVELO ที่ต้องทำลายเพื่อแลกเปลี่ยนตามสูตร "redeemTokens = redeemAmountIn / exchangeRate"

จากฟังก์ชัน "exchangeRateStoredInternal" เราจะเห็นได้ว่าเนื่องจากขณะนี้ \_totalSupply คือ 2 ไม่ใช่ 0 จึงต้องคำนวณค่า exchangeRate โดยใช้สูตร "exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply" จึงคำนวณได้ว่า exchangeRate ปัจจุบันคือ "17,735,851,964,756,377,265,143,988,000,000,000,000,000,000" ที่มีค่ามากกว่าค่าเริ่มต้นของ exchangeRate "200,000,000,000,000,000,000,000,00"

ผลลัพธ์จากการแปลคือ "ค่า 'redeemTokens' ที่คำนวณจากอัตราแลกเปลี่ยนใหม่คือ '1.99' โดยเนื่องจากคุณสมบัติของ Solidity ที่ปัดเศษลง ค่า 'redeemTokens' จะมีค่าเป็น 1 ในที่สุด นั่นหมายความว่าผู้โจมตี 0xa163 ใช้โทเค็น soVELO ค่า 1 เพื่อแลกคืนโทเค็น VELO เกือบทั้งหมดที่เคยฝากไว้ ในเวลาเดียวกันผู้โจมตี 0xa163 ก็ได้รับผลกำไรจากการยืม WETH ค่า '265,842,857,910,985,546,929' จาก soWETH"

soVELO.redeem บริการอ้างอิง:Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

com.soVELO.exchangeRateStoredInternal:Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析 7. ผู้โจมตี 0xa163 โอน WETH ที่ยืมมาทั้งหมดและแลก VELO Token ไปยังผู้โจมตีด้านบนจากนั้นทําลายตัวเอง 8. ผู้โจมตีเรียกใช้ฟังก์ชั่น "liquidateBorrow" ของ soWETH เพื่อล้างค่าทรัพย์สินบางส่วนที่ถูกยืมเงินโดยสัญญาสร้างตัวใหม่ 0xa163 เพื่อกู้คืนโทเค็น soVELO ที่ถูกล็อกค่า 1 ปัจจุบันผู้โจมตีเพียงถือครองโทเค็น soVELO ค่า 1 เท่านั้น 9. ผู้โจมตีเรียกใช้ฟังก์ชัน "สร้าง" ของ soVELO อีกครั้งเพื่อดาวน์เงินเหรียญ soVELO ที่เพียงพอสำหรับจำนวน 2 soVELO เหรียญแล้วดำเนินการตามขั้นตอนที่ 3-8 ดังกล่าวอีกครั้งเพื่อผลกำไรจากเหรียญ undeylying อื่น ๆ 10. ผู้โจมตีทําขั้นตอนที่ 9 หลายครั้งชําระเงินกู้แฟลชและออกจากตลาดด้วยกําไร

$100 เป็นวิธีใดที่จะสร้างความเปลี่ยนแปลงมูลค่า $6.5 ล้าน

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

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

การติดตามเงินทุน

ผู้โจมตีโอนเงินไม่นานหลังจากคว้าเงินที่ผิดกฎหมายซึ่งส่วนใหญ่ถูกโอนไปยังที่อยู่ 4 แห่งต่อไปนี้บางส่วนเพื่อดําเนินการต่อการโจมตีที่ที่อยู่อื่นและบางส่วนไปยังการฟอกเงิน:

  1. 0x4ab93fc50b82d4dc457db85888dfdae28d29b98d

ผู้โจมตีโอน 198 WETH ไปยังที่อยู่จากนั้นที่อยู่ใช้กลยุทธ์การโจมตีเดียวกันเพื่อรับเงินที่ผิดกฎหมายในการทําธุรกรรมต่อไปนี้:

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

หลังจากการโจมตีที่อยู่จะโอนเงินไปยัง * 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb *

  1. 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb

ผู้โจมตีโอน 724277 USDC และ 2353 VELO เข้าสู่ที่อยู่นี้ และแลก USDC เป็น Ether ในทันที หลังจากนั้นโอนส่วนหนึ่งของเงินไปยังสะพานข้ามเครือข่าย Stargate แต่เงินที่เหลืออยู่ในที่อยู่นี้เป็นเงินที่ผิดกฎหมาย

Web3安全警示丨损失高达2000万美元,Sonne Finance攻击事件分析

  1. 0xbd18100a168321701955e348f03d0df4f517c13b

ผู้โจมตีโอน 33 WETH ไปยังที่อยู่และใช้ peel chain เพื่อลองฟอกเงินลิงก์การฟอกเงินมีดังนี้:

0xbd18100a168321701955e348f03d0df4f517c13b -> 0x7e97b74252b6df53caf386fb4c54d4fb59cb6928 -> 0xc521bde5e53f537ff208970152b75a003093c2b4 -> * 0x9f09ec563222fe52712dc413d0b7b66cb5c7c795*。

  1. 0x4fac0651bcc837bf889f6a7d79c1908419fe1770

ผู้โจมตีโอน 563 WETH เข้าสู่ที่อยู่นี้แล้วภายหลังโอนให้กับ 0x1915F77A116dcE7E9b8F4C4E43CDF81e2aCf9C68 และยังไม่มีการกระทำเพิ่มเติมในขณะนี้

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

คำแนะนำเกี่ยวกับความปลอดภัย

  1. การสูญเสียความแม่นยําต้องให้ความสนใจ ปัญหาด้านความปลอดภัยที่เกิดจากการสูญเสียความแม่นยําเกิดขึ้นทีละรายการโดยเฉพาะอย่างยิ่งในโครงการ Defi ซึ่งการสูญเสียความแม่นยํามักนําไปสู่การสูญเสียทางการเงินที่ร้ายแรง ขอแนะนําให้ทีมโครงการและผู้ตรวจสอบความปลอดภัยตรวจสอบรหัสอย่างรอบคอบด้วยการสูญเสียความแม่นยําในโครงการและทํางานได้ดีในการทดสอบเพื่อหลีกเลี่ยงช่องโหว่ให้มากที่สุด
  2. ขอแนะนําให้สร้างและดําเนินการปักหลักครั้งแรกของตลาดที่คล้ายกับ cToken ใน Compound ดําเนินการโดยผู้ใช้ที่มีสิทธิพิเศษเพื่อหลีกเลี่ยงการถูกจัดการโดยผู้โจมตีเพื่อจัดการกับอัตราแลกเปลี่ยน
  3. เมื่อตัวแปรสำคัญในสัญญาอยู่ในขึ้นตอนที่ขึ้นอยู่กับค่า "this.balance" หรือ "token.balanceOf()" นั้นจำเป็นต้องพิจารณาอย่างรอบคอบเงื่อนไขที่ตัวแปรสำคัญเปลี่ยนแปลง เช่น ว่าอนุญาตให้เปลี่ยนแปลงค่าตัวแปรโดยการส่งเหรียญตราหรือสัญญา หรืออาจจะสามารถเปลี่ยนแปลงค่าตัวแปรได้เฉพาะผ่านการเรียกใช้ฟังก์ชันที่เฉพาะเจาะจงเท่านั้น

บทความนี้เขียนโดย Cara จากทีม ZAN (บัญชี X: @Cara6289) และ XiG (บัญชี X: @SHXiGi) ร่วมกัน.

ดูต้นฉบับ
  • รางวัล
  • แสดงความคิดเห็น
  • แชร์
แสดงความคิดเห็น
ไม่มีความคิดเห็น