วิธียกเลิกการอนุมัติโทเคนบน Ethereum และเชน EVM อื่นๆ
เรียนรู้ทีละขั้นตอนว่าจะยกเลิกการอนุมัติบน Ethereum และเชน EVM อื่นๆ อย่างไร การอนุมัติแบบใดมีความเสี่ยง การยกเลิกมีค่าใช้จ่ายเท่าใด และสิ่งที่การยกเลิกย้อนกลับไม่ได้
หากต้องการยกเลิกการอนุมัติโทเคนบน Ethereum หรือเชน EVM อื่น ให้เชื่อมต่อกระเป๋าเงินกับเครื่องมือตรวจสอบการอนุมัติที่เชื่อถือได้ (เช่น Revoke.cash หรือเครื่องมือตรวจสอบการอนุมัติโทเคนของ block explorer) เลือกเครือข่าย ตรวจดูว่าสัญญาใดใช้จ่ายโทเคนของคุณได้บ้าง แล้วส่งธุรกรรมยกเลิกสำหรับรายการที่คุณไม่ได้ใช้แล้วหรือไม่รู้จัก การยกเลิกแต่ละครั้งเป็นธุรกรรมบนเชนที่ตั้งวงเงินเป็นศูนย์และมีค่าแก๊สเล็กน้อย
การอนุมัติเป็นหนึ่งในความเสี่ยงที่ถูกมองข้ามมากที่สุดในการเก็บรักษาสินทรัพย์ด้วยตนเอง ทุกครั้งที่คุณเทรดบนกระดานเทรดแบบกระจายศูนย์หรือใช้แอป DeFi คุณมักจะให้สิทธิ์สัญญาในการย้ายโทเคนของคุณ สิทธิ์เหล่านั้นจะมีผลไปเรื่อยๆ โดยไม่มีกำหนด หากภายหลังสัญญานั้นถูกโจมตี หรือหากคุณอนุมัติสัญญาที่เป็นอันตราย โทเคนของคุณอาจถูกนำไปได้โดยที่คุณไม่ต้องลงนามอะไรอีก
การอนุมัติโทเคนทำงานอย่างไร
โทเคน ERC-20 ซึ่งเป็นมาตรฐานของโทเคนส่วนใหญ่บน Ethereum มีฟังก์ชัน approve เมื่อคุณอนุมัติสัญญาใด คุณกำลังตั้งวงเงิน (allowance) ซึ่งก็คือจำนวนสูงสุดของโทเคนนั้นที่สัญญาโอนออกจากที่อยู่ของคุณได้
หลายแอปขอวงเงินแบบไม่จำกัด เพื่อที่คุณจะไม่ต้องอนุมัติใหม่ทุกครั้งที่เทรด ซึ่งสะดวก แต่หมายความว่าสัญญาสามารถย้ายยอดคงเหลือทั้งหมดของโทเคนนั้นได้ทุกเมื่อ ทั้งตอนนี้และในอนาคต
NFT ก็ทำงานคล้ายกัน ฟังก์ชัน setApprovalForAll ให้สิทธิ์ผู้ดำเนินการ (operator) ย้าย NFT ทุกชิ้นในคอลเลกชันที่คุณเป็นเจ้าของ นี่คือเหตุผลที่ NFT drainer มุ่งเป้าไปที่ฟังก์ชันนี้
ยังมีรูปแบบที่ใหม่กว่า นั่นคือลายเซ็น permit โทเคนและระบบบางตัว (รวมถึง Permit2 ของ Uniswap) ให้คุณมอบวงเงินด้วยการลงนามข้อความนอกเชนแทนการส่งธุรกรรม ลายเซ็นเหล่านี้ดูไม่มีพิษภัยแต่สามารถอนุญาตการโอนได้ บทความของเราเรื่อง ice phishing และลายเซ็น permit อธิบายความเสี่ยงนี้
ทีละขั้นตอน: วิธียกเลิกการอนุมัติ
- 1เปิดเครื่องมือที่เชื่อถือได้โดยตรง พิมพ์ที่อยู่เว็บเองหรือใช้บุ๊กมาร์ก ตัวเลือกที่เป็นที่รู้จัก ได้แก่ Revoke.cash และเครื่องมือตรวจสอบการอนุมัติโทเคนบน Etherscan และ explorer อื่นๆ เว็บ “revoke” ปลอมมีอยู่จริง ดังนั้นอย่าคลิกลิงก์จาก DM หรือโฆษณาเด็ดขาด
- 2เชื่อมต่อกระเป๋าเงินหรือวางที่อยู่ของคุณ การวางที่อยู่ช่วยให้คุณดูการอนุมัติได้โดยไม่ต้องเชื่อมต่อ คุณต้องเชื่อมต่อเฉพาะตอนส่งธุรกรรมยกเลิกเท่านั้น
- 3เลือกเครือข่าย การอนุมัติแยกตามเชน ตรวจสอบ Ethereum แล้วตามด้วยทุกเครือข่ายที่คุณใช้ เช่น Arbitrum, Optimism, Base, Polygon หรือ BNB Smart Chain
- 4ตรวจดูรายการ สำหรับการอนุมัติแต่ละรายการ คุณจะเห็นโทเคน สัญญาที่มีสิทธิ์ใช้จ่าย จำนวนวงเงิน และบ่อยครั้งจะเห็นว่าได้รับอนุมัติเมื่อใด
- 5ระบุสิ่งที่ควรยกเลิก ให้ความสำคัญกับวงเงินไม่จำกัด ผู้ใช้จ่ายที่คุณไม่รู้จัก แอปที่คุณไม่ได้ใช้แล้ว และสัญญาใดๆ ที่เกี่ยวข้องกับการโจมตีที่เป็นที่รู้จัก
- 6คลิกยกเลิกและยืนยันในกระเป๋าเงิน อ่านข้อความในกระเป๋าเงิน ควรเป็นการเรียก
approveที่ตั้งวงเงินเป็นศูนย์ (หรือการเรียกsetApprovalForAllที่ตั้งเป็น false สำหรับ NFT) - 7ทำซ้ำในแต่ละเครือข่าย จากนั้นรีเฟรชเพื่อยืนยันว่าการอนุมัติหายไปแล้ว
การอนุมัติแบบใดที่ควรยกเลิกก่อน
| ประเภทการอนุมัติ | ระดับความเสี่ยง | สิ่งที่ควรทำ |
|---|---|---|
| วงเงินไม่จำกัดให้สัญญาที่ไม่รู้จัก | สูง | ยกเลิกทันที |
setApprovalForAll บนคอลเลกชัน NFT ที่มีมูลค่า | สูง | ยกเลิก เว้นแต่กำลังลงขายอยู่ |
| วงเงินไม่จำกัดให้แอปที่คุณไม่ได้ใช้แล้ว | ปานกลาง | ยกเลิก |
| วงเงินจำกัดให้แอปที่น่าเชื่อถือซึ่งคุณใช้บ่อย | ต่ำ | คงไว้หรือลดวงเงิน |
| การอนุมัติให้สัญญาที่เกี่ยวข้องกับการโจมตี | สูง | ยกเลิกทันที |
สิ่งที่การยกเลิกทำไม่ได้
การยกเลิกเป็นการป้องกัน ไม่ใช่การรักษา มันจะไม่:
- คืนโทเคนที่ถูกโอนไปแล้ว
- ปกป้องคุณหาก seed phrase หรือไพรเวตคีย์ของคุณถูกขโมย ในกรณีนั้นผู้โจมตีลงนามอะไรก็ได้ ให้ย้ายสินทรัพย์ที่เหลือไปยังกระเป๋าเงินใหม่ตามที่อธิบายไว้ใน สิ่งที่ต้องทำทันทีหากกระเป๋าเงินของคุณถูกเจาะ
- ยกเลิกลายเซ็น permit นอกเชนที่คุณให้ไปแล้วได้อย่างแน่นอน ลายเซ็นเหล่านี้มีกฎการหมดอายุและ nonce ของตัวเอง ดังนั้นหากคุณลงนาม permit ที่น่าสงสัย วิธีที่ปลอดภัยที่สุดคือย้ายโทเคนที่ได้รับผลกระทบไปยังกระเป๋าเงินใหม่
ลดความเสี่ยงจากการอนุมัติในอนาคต
- ตั้งวงเงินเอง กระเป๋าเงินหลายตัวให้คุณแก้ไขจำนวนในหน้าขออนุมัติได้ อนุมัติเฉพาะจำนวนที่คุณตั้งใจจะใช้
- ใช้กระเป๋าเงินแยกสำหรับการทดลอง เก็บ burner wallet ไว้สำหรับแอปใหม่ การมินต์ และแอร์ดรอป และเก็บเงินระยะยาวไว้ในกระเป๋าเงินที่ไม่เคยเชื่อมต่อกับเว็บที่ไม่คุ้นเคย
- อ่านคำขอลงนามทุกครั้ง หากเว็บไซต์ขอให้คุณลงนามข้อความที่คุณไม่เข้าใจ ให้หยุด
- ตรวจสอบการอนุมัติอย่างสม่ำเสมอ ทุกๆ สองสามเดือน และหลังจากลองใช้แอปใหม่ใดๆ
- ตรวจสอบเว็บที่เชื่อมต่อด้วย การเชื่อมต่อกับการอนุมัติเป็นคนละเรื่องกัน ดู สิทธิ์ของกระเป๋าเงินและเว็บที่เชื่อมต่อ
ข้อผิดพลาดที่พบบ่อย
- ใช้เครื่องมือยกเลิกปลอมที่เจอผ่านโฆษณาบนเครื่องมือค้นหาหรือการตอบกลับบนโซเชียลมีเดีย
- ยกเลิกบน Ethereum แต่ลืมกระเป๋าเงินเดียวกันบนเครือข่ายเลเยอร์ 2
- คิดว่าการตัดการเชื่อมต่อเว็บไซต์ในกระเป๋าเงินจะลบการอนุมัติของเว็บนั้นด้วย ซึ่งไม่ใช่
- มองข้ามโทเคนมูลค่าต่ำ ผู้โจมตีมักกวาดทุกอย่างที่เอาไปได้
สรุป
การอนุมัติโทเคนคือสิทธิ์ถาวรที่ยังคงอยู่ต่อไปนานหลังจากที่คุณให้ไป การตรวจสอบทำได้ฟรี การยกเลิกมีต้นทุนต่ำ และการทำเป็นประจำจะปิดช่องทางที่ drainer ใช้บ่อยที่สุดช่องทางหนึ่ง ทำให้เป็นกิจวัตร อนุมัติเฉพาะสิ่งที่จำเป็น และเก็บสินทรัพย์หลักไว้ในกระเป๋าเงินที่แทบไม่ได้ลงนามอะไรเลย
คำถามที่พบบ่อย
การอนุมัติโทเคนคืออะไร
การอนุมัติโทเคนคือสิทธิ์ที่คุณให้สมาร์ทคอนแทรกต์ในการย้ายโทเคนชนิดหนึ่งออกจากกระเป๋าเงินของคุณได้ไม่เกินจำนวนที่กำหนด กระดานเทรดแบบกระจายศูนย์และแอป DeFi อื่นๆ ต้องใช้การอนุมัติจึงจะทำงานได้ สิทธิ์นี้จะยังมีผลจนกว่าคุณจะยกเลิกหรือวงเงินถูกใช้หมด แม้คุณจะไม่กลับไปใช้แอปนั้นอีกเลยก็ตาม
การยกเลิกการอนุมัติต้องเสียค่าแก๊สหรือไม่
ต้องเสีย การยกเลิกเป็นธุรกรรมบนเชนที่ตั้งวงเงินเป็นศูนย์ คุณจึงต้องจ่ายค่าธรรมเนียมเครือข่ายตามปกติ บน Ethereum mainnet ค่าธรรมเนียมอาจสูงพอสมควร ส่วนบนเครือข่ายเลเยอร์ 2 มักถูก การดูรายการอนุมัติของคุณไม่มีค่าใช้จ่าย
การยกเลิกการอนุมัติจะทำให้ได้โทเคนที่ถูกขโมยคืนหรือไม่
ไม่ได้ การยกเลิกเพียงป้องกันไม่ให้สัญญานั้นโอนโทเคนในอนาคต โทเคนที่ถูกนำไปแล้วไม่สามารถกู้คืนได้ด้วยการยกเลิก หาก seed phrase หรือไพรเวตคีย์ของคุณรั่วไหล การยกเลิกอย่างเดียวไม่พอ ให้ย้ายเงินที่เหลือไปยังกระเป๋าเงินใหม่
ควรตรวจสอบการอนุมัติโทเคนบ่อยแค่ไหน
นิสัยที่ดีคือตรวจทานทุกๆ สองสามเดือน และหลังทุกครั้งที่คุณใช้งานแอปใหม่หรือแอปที่ไม่คุ้นเคย และควรตรวจสอบทันทีหากสงสัยว่าคุณได้ลงนามในสิ่งที่เป็นอันตราย
