Skip to content
คู่มือออปชันทั้งหมด
ความปลอดภัยของกระเป๋าคริปโต12 min read

วงเงินอนุญาตโทเคนคริปโต: วิธีตรวจสอบและเพิกถอน

เรียนรู้ว่า ERC-20 approve อนุญาตให้สัญญาทำอะไร วงเงินไม่จำกัดและลายเซ็น permit ทำงานอย่างไร และการเพิกถอนเปลี่ยนหรือไม่เปลี่ยนอะไรบ้าง

ในคู่มือนี้การเชื่อมต่อกระเป๋ากับการอนุญาตโทเคนเป็นสิทธิ์คนละแบบ

สรุปสั้น

คำสั่ง ERC-20 approve โดยทั่วไปไม่ได้ส่งโทเคนออกไปทันที แต่บันทึกวงเงินบนเชนที่ spender รายหนึ่งอาจเรียกผ่าน transferFrom ได้ในภายหลัง การตัดการเชื่อมต่อกระเป๋าจากเว็บไซต์ไม่ได้ลบวงเงินบนเชนเสมอไป และการตั้งวงเงินเป็นศูนย์ก็ย้อนคืนการโอนที่เสร็จแล้วไม่ได้

การเชื่อมต่อกระเป๋ากับการอนุญาตโทเคนเป็นสิทธิ์คนละแบบ

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

วงเงิน ERC-20 ผูกกับสัญญาโทเคน เครือข่าย ที่อยู่เจ้าของ และที่อยู่ spender การอนุญาต spender ให้ใช้โทเคนบน Ethereum ไม่ได้ให้สิทธิ์เดียวกันกับโทเคนอีกตัวหรือโทเคนตัวเดิมบน Polygon หากจำได้เพียงว่า “เคยอนุญาตเว็บไซต์นี้” ก็อาจมองข้ามวงเงินที่ยังใช้งานได้บนโทเคนหรือเครือข่ายอื่น

บทความนี้เน้น approve, allowance และ transferFrom ของ ERC-20 บน Ethereum และเครือข่ายที่เข้ากันได้ การโอน ETH โดยตรง สิทธิ์ NFT setApprovalForAll มาตรฐานโทเคนอื่น และการเข้าสู่ระบบด้วยกระเป๋าใช้รูปแบบสิทธิ์ที่ต่างกัน การสำรองและกู้คืนวลีตั้งต้นเป็นอีกเรื่องหนึ่ง อ่านคู่มือวลีตั้งต้นและการกู้คืนกระเป๋า เพิ่มเติม

approve กำหนดวงเงินใช้จ่าย ไม่ได้ส่งโทเคนออกไป

เจ้าของโทเคนเรียก approve(spender, amount) ในสัญญาโทเคนเพื่ออนุญาตให้ spender ที่ระบุใช้โทเคนได้ไม่เกิน amount ฟังก์ชัน transferFrom ตามมาตรฐานทำให้ spender ย้ายโทเคนในนามเจ้าของได้ ดังนั้นธุรกรรม approve โดยทั่วไปไม่ได้ย้ายยอดคงเหลือด้วยตัวเอง แต่สัญญาสามารถเรียก transferFrom ในภายหลังเพื่อใช้วงเงิน นี่คือขั้นตอนการอนุญาตตามมาตรฐาน ERC-20

ตัวอย่างเช่น กระเป๋ามีโทเคน 300 หน่วยและให้ router หนึ่งรายใช้ได้ 80 หน่วย โดยทั่วไป spender แบบ ERC-20 จะถูกจำกัดด้วยค่าที่น้อยกว่าระหว่างวงเงินคงเหลือกับยอดของเจ้าของ สิทธิ์นี้อาจครอบคลุมหลายธุรกรรม เพราะสัญญาเรียก transferFrom ได้หลายครั้ง หากสัญญาที่อนุมัติหรือขั้นตอนการเรียกใช้งานถูกใช้ในทางที่ผิด โทเคนอาจเคลื่อนย้ายในแบบที่ผู้ใช้ไม่คาดคิด พฤติกรรมโทเคนที่ไม่เป็นมาตรฐานและข้อจำกัดเพิ่มเติมก็สำคัญเช่นกัน

approve มักเป็นธุรกรรมบนเชนไปยังสัญญาโทเคนและอาจมีค่าธรรมเนียมเครือข่าย บางแอปแยกการอนุมัติกับการแลกเป็นคนละธุรกรรม บางแอปรวมสิทธิ์ที่ลงนามไว้กับธุรกรรมภายหลัง อย่าตัดสินจากปุ่มที่เขียนว่า “Approve” อย่างเดียว ให้ตรวจคำขอที่กระเป๋าให้ลงนามและเครือข่ายที่เลือก

วงเงินไม่จำกัดไม่ได้หมายถึงการถอนทันที

ป้าย “Unlimited” ในกระเป๋ามักหมายถึงวงเงินใกล้กับค่าจำนวนเต็มสูงสุดของโทเคน ไม่ได้สร้างโทเคนเพิ่มหรือโอนยอดปัจจุบันออกไปในขณะอนุมัติ อย่างไรก็ตาม spender อาจใช้วงเงินของโทเคนชนิดนั้นบนเครือข่ายเดียวกันภายหลัง รวมถึงโทเคนชนิดเดียวกันที่เข้ากระเป๋าในอนาคต การทำงานบางแบบคงวงเงินสูงสุดไว้แทนที่จะลดลง จึงควรตรวจว่าโทเคนนั้นจัดการค่านี้อย่างไร

แอปอาจขอวงเงินกว้างเพื่อลดขั้นตอนอนุมัติซ้ำ แต่ควรพิจารณาความสะดวกควบคู่กับความเสี่ยง หากสัญญา spender มีช่องโหว่หรือมีผู้ควบคุมใช้งานในทางที่ผิด สิทธิ์เก่าอาจถูกใช้ในภายหลัง คู่มือการเพิกถอนของ Ethereum.org อธิบายว่าเหตุใดวงเงินกว้างยังสำคัญ แม้ผู้ใช้จะย้ายสินทรัพย์กลับเข้ากระเป๋าแล้ว

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

ภาพไร้ตัวอักษรของกระเป๋า โทเคนสีทอง และวาล์วที่สื่อถึงวงเงินอนุญาตโทเคนหลายระดับ
Allowance ให้สัญญาที่ระบุใช้โทเคนได้ภายหลัง ตรวจที่อยู่และจำนวนก่อนลงนาม

ตรวจเครือข่าย โทเคน spender และจำนวนก่อนลงนาม

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

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

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

ลายเซ็น permit เปลี่ยนขั้นตอนอนุมัติ ไม่ได้เปลี่ยนสิทธิ์

โทเคน ERC-20 บางชนิดรองรับ ERC-2612 permit เจ้าของลงนามข้อมูลแบบมีชนิดแทนการส่งธุรกรรม approve ตามปกติ จากนั้นอีกฝ่ายอาจส่งลายเซ็นนั้นเพื่อตั้งวงเงินโทเคน ข้อความมาตรฐานมีเจ้าของ spender จำนวน nonce และ deadline ส่วนข้อมูล domain ช่วยผูกลายเซ็นกับเครือข่ายและสัญญา

deadline ของ ERC-2612 คือเวลาสุดท้ายที่ส่ง permit ที่ลงนามไว้ได้ ไม่ได้หมายความว่าวงเงินที่ตั้งสำเร็จแล้วจะหมดอายุโดยอัตโนมัติในเวลานั้น วงเงินอาจอยู่ต่อไปจนกว่าจะถูกใช้ เปลี่ยน หรือเพิกถอน โทเคนบางตัวใช้รูปแบบ permit แบบอื่นหรือมีกฎหมดอายุเพิ่มเติม จึงอย่าคิดว่าคำขอชื่อ “permit” ในกระเป๋าทุกแบบเป็น ERC-2612

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

ตัดการเชื่อมต่อเว็บไซต์ไม่ได้เพิกถอนวงเงินบนเชน

การออกจากระบบหรือตัดการเชื่อมต่อกระเป๋าเปลี่ยนเซสชันของเบราว์เซอร์หรือสิทธิ์การเชื่อมต่อ วงเงิน ERC-20 ที่บันทึกอยู่ในสัญญาโทเคนอาจยังคงอยู่ ในทางกลับกัน การเพิกถอนวงเงินไม่ได้ลบที่อยู่สาธารณะที่เว็บไซต์ทราบหรือประวัติบนเชน คู่มือตัดการเชื่อมต่อ dapp ของ MetaMask อธิบายความแตกต่างนี้

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

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

การเพิกถอนหยุดการใช้ในอนาคต แต่ย้อนการโอนที่เสร็จแล้วไม่ได้

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

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

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

การเปลี่ยนวงเงินอาจมี race condition ตาม ERC-20

มาตรฐาน ERC-20 แนะนำให้ส่วนติดต่อผู้ใช้ตั้งวงเงินที่ไม่ใช่ศูนย์เป็นศูนย์ก่อนเปลี่ยนเป็นค่าที่ไม่ใช่ศูนย์ค่าใหม่ หากธุรกรรมของ spender ถูกจัดลำดับระหว่างการอนุมัติเก่าและใหม่ spender อาจใช้ได้มากกว่าที่ผู้ใช้คาด ตัวอย่างเช่น ระหว่างเปลี่ยนวงเงินจาก 100 เป็น 25 spender อาจใช้วงเงินเดิม 100 ก่อน แล้วจึงใช้วงเงินใหม่ 25 ต่อ

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

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

ใช้รายการตรวจสั้น ๆ สำหรับสิทธิ์ของกระเป๋าและโทเคน

  1. ตรวจโดเมนทางการของโครงการและเครือข่ายที่เลือก
  2. ยืนยันสัญญาโทเคนกับที่อยู่ spender แล้วเทียบวงเงินกับจำนวนที่ต้องใช้จริง
  3. อ่านธุรกรรมหรือคำขอข้อมูลแบบมีชนิดในกระเป๋า อย่าลงนามคำขอที่ไม่เข้าใจ
  4. หลังใช้ spender ที่ไม่ไว้วางใจแล้ว ให้ตรวจวงเงินบนเครือข่ายที่เกี่ยวข้อง ตั้งสิทธิ์ที่ไม่ใช้แล้วเป็นศูนย์เมื่อเหมาะสม และยืนยันผล
  5. เมื่อเปรียบเทียบกระเป๋า ให้ดูเครือข่ายที่รองรับ ความชัดเจนในการแสดงสิทธิ์อนุมัติ และคำแนะนำเรื่องอัปเดตกับกู้คืน

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

คำถามที่พบบ่อย

Q1การตัดการเชื่อมต่อกระเป๋าลบการอนุมัติโทเคนเดิมหรือไม่?

ไม่ การเชื่อมต่อเว็บไซต์เป็นเซสชันกระเป๋า ส่วนวงเงิน ERC-20 เป็นสถานะบนเชนในสัญญาโทเคน ตรวจเครือข่ายกับโทเคนที่เกี่ยวข้อง แล้วเพิกถอนวงเงินของ spender แยกต่างหากหากจำเป็น

Q2หากตั้งวงเงินเป็นศูนย์ จะกู้โทเคนที่ถูกนำไปแล้วคืนได้ไหม?

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

Q3โทเคนคริปโตและ NFT ทุกชนิดใช้วงเงิน ERC-20 หรือไม่?

ไม่ บทความนี้ครอบคลุม ERC-20 approve และ transferFrom สิทธิ์ผู้ดำเนินการ NFT สินทรัพย์ native มาตรฐานอื่น และสิทธิ์เฉพาะเครือข่ายมีกฎต่างกัน

แหล่งข้อมูลและการอ่านเพิ่มเติม

รายงานปัญหา

เราจะเตรียมอีเมลพร้อมลิงก์บทความนี้ Mark จะได้รับรายงานเมื่อคุณส่งอีเมลแล้วเท่านั้น

ตรวจสอบอย่างรวดเร็ว

อ่านคู่มือจบแล้ว ลองตอบคำถาม 3 ข้อ

คำถาม 1 / 3

คำถาม 01

ERC-20 approve(spender, amount) ทำอะไรเป็นหลัก?

เลือกคำตอบเพื่อดูคำอธิบาย

อภิธานศัพท์ออปชัน

คู่มือกู้คืนคริปโตวอลเล็ตSeed phrase ของคริปโตวอลเล็ต: การสำรอง การกู้คืน และ passphraseเรียนรู้ความเชื่อมโยงระหว่าง seed phrase กับ private key วิธีเก็บสำรองแบบออฟไลน์ และผลของ passphrase ต่อการกู้คืนเปรียบเทียบจุดที่ต่างกันจริงPerpetual บน CEX กับ DEX: การดูแลสินทรัพย์ คำสั่ง และการถอนเปรียบเทียบแพลตฟอร์มรับฝากสินทรัพย์กับโปรโตคอล perpetual แบบ on-chain ผ่านการควบคุมกุญแจ การส่งคำสั่ง หลักประกัน และการกู้คืนบัญชี โดยไม่ใช้คำว่า CEX หรือ DEX เป็นระดับความปลอดภัยตายตัวกลไกออปชันการถูกใช้สิทธิ์ออปชันคืออะไรทำความเข้าใจว่าการถูก assign เปลี่ยน short call หรือ put ให้เป็นภาระผูกพันต่อหุ้นได้อย่างไร เกิดขึ้นเมื่อใด และเตรียมเงินสดกับหุ้นอย่างไรจำนวนสัญญาที่อนุญาตไม่ใช่งบประมาณความเสี่ยงPosition limits เทียบกับ exercise limits ของออปชันอธิบายอย่างไรเรียนรู้ว่า position limits ของออปชันที่จดทะเบียนต่างจาก exercise limits อย่างไร เหตุใดการรวมฝั่งเดียวกันและการรายงานจึงสำคัญ และเหตุใดมาร์จินหรือ buying power จึงไม่บอกว่าจำนวนหนึ่งได้รับอนุญาตการซื้อขายออปชันBid-ask spread ของออปชันคืออะไรเรียนรู้ว่า bid, ask, midpoint, ความกว้างของ spread, size และประเภทคำสั่งมีผลต่อราคาที่คุณได้รับหรือจ่ายจริงอย่างไร