ข้ามไปยังเนื้อหา

เหตุใดกระเป๋าเงินจึงแสดงยอดโทเค็นผิดได้?

สาเหตุของยอดคงเหลือที่ต่างกันและวิธีตรวจสอบสถานะบนเชนอย่างปลอดภัย

อัปเดต

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

คำตอบโดยตรง

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

สำหรับ ERC-20 ทั่วไป จุดเริ่มที่น่าเชื่อถือที่สุดคือผล balanceOf ของบัญชีที่ถูกต้อง ณ บล็อกที่ระบุบนเชนที่ถูกต้อง อย่างไรก็ดี ผลนั้นเป็นเพียงหน่วยตามกฎของสัญญา โทเค็น rebase หุ้น vault สินทรัพย์ wrapped และสถานะในโปรโตคอลอาจต้องแปลงเพิ่มเพื่อหาสิทธิทางเศรษฐกิจหรือจำนวนที่แลกคืนได้ในปัจจุบัน

กลไกการทำงาน

  • สถานะสัญญา: โหนด RPC เรียก balanceOf ผ่าน eth_call กับสถานะของบล็อกที่เลือก
  • ดัชนีเหตุการณ์: บริการสแกนบันทึก Transfer เพื่อค้นหาโทเค็น สร้างประวัติ และอัปเดตยอดในแคช
  • ข้อมูลและมูลค่า: decimals สัญลักษณ์ รายการโทเค็น อัตราแลกเปลี่ยน และแหล่งราคาแปลงจำนวนเต็มดิบเป็นจำนวนที่แสดงและมูลค่าเงินทั่วไป
  • นโยบายหน้าจอ: กระเป๋าอาจซ่อนสินทรัพย์ที่ยังไม่ตรวจสอบหรือสแปม รวมบัญชี ตามเชนไม่ทัน หรือเก็บแคชเก่าไว้

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

การเลือกบล็อกก็สำคัญ JSON-RPC รองรับ latest, safe และ finalized ขณะที่ผู้ให้บริการอาจอยู่คนละหัวเชน EIP-1898 ผูกการอ่านที่เกี่ยวข้องกับแฮชบล็อกเดียว และขอให้เป็นบล็อกมาตรฐานได้ หากไม่มีอ้างอิงร่วมกัน การอ่านที่ถูกต้องสองครั้งอาจอธิบายคนละสถานะระหว่างซิงค์หรือปรับโซ่

  1. ยืนยันเครือข่ายและ chainId เพราะยอดฝั่งต้นทางและปลายทางของ bridge อยู่คนละบัญชีแยกประเภท
  2. รับที่อยู่สัญญาจากแหล่งโครงการที่เชื่อถือได้หรือทะเบียนที่ตรวจสอบแล้ว อย่าระบุโทเค็นจากสัญลักษณ์อย่างเดียว
  3. ยืนยันที่อยู่บัญชี มาตรฐานโทเค็น และชนิดสินทรัพย์ว่าเป็นโทเค็นพื้นฐาน wrapped หุ้น vault หรือใบรับของโปรโตคอล
  4. ถาม balanceOf จาก RPC อิสระสองรายที่หมายเลขหรือแฮชบล็อกเดียวกัน และบันทึกจำนวนดิบกับ decimals ที่สัญญารายงานแยกกัน
  5. ตรวจใบเสร็จ สถานะ ที่อยู่สัญญา บันทึก และบล็อกมาตรฐาน เปรียบเทียบสถานะก่อนและหลังที่บล็อกระบุ ไม่พึ่งเพียงการแจ้งเตือนของกระเป๋า
  6. สำหรับ rebase หรือสินทรัพย์แบบหุ้น ให้ใช้วิธีแปลงและแลกคืนในเอกสาร ใน ERC-4626 balanceOf แสดงหุ้น และ convertToAssets ประมาณสินทรัพย์พื้นฐาน ไม่จำเป็นต้องเท่ากับราคาแลกคืนจริง

ตัวอย่าง

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

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

ความเสี่ยงและการควบคุม

  • เครือข่ายหรือที่อยู่ผิด: ก่อนทำธุรกรรมแก้ไข ให้ตรวจ chainId ที่อยู่บัญชีเต็ม และที่อยู่สัญญาเต็ม
  • ข้อมูล RPC เก่าหรือไม่ตรงกัน: เปรียบเทียบผู้ให้บริการอิสระที่บล็อกระบุเดียวกัน อย่าผสม latest จากคนละเวลา
  • การปรับโซ่: ถือว่าบล็อกใหม่ยังชั่วคราวตามแบบจำลอง finality และตรวจว่าใบเสร็จยังอยู่บนโซ่มาตรฐาน
  • ดัชนีขาด: สแกนใหม่จากบล็อกที่รู้จักและเทียบบันทึกกับสถานะ ตัวทำดัชนีควรย้อนบล็อกกำพร้า ไม่ใช่เพิ่มเหตุการณ์ใหม่อย่างเดียว
  • บัญชีเฉพาะ: อย่าสร้างยอด rebase, vault หรือโทเค็นใบรับจากผลรวม Transfer หากโปรโตคอลไม่ได้ระบุวิธีนี้
  • ข้อมูลหรือราคาผิด: แยกหน่วยดิบ จำนวนโทเค็น และมูลค่าเงิน ราคาผิดไม่เปลี่ยนยอดบนเชน แต่ decimals ผิดเปลี่ยนการแสดงผล
  • โทเค็นหรือหน้าจออันตราย: การดูยอดไม่ต้องอนุมัติหรือลงนาม ปฏิเสธลิงก์กู้คืน การอนุมัติ หรือธุรกรรมที่อ้างว่าใช้รีเฟรชยอด

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

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

ความเข้าใจผิดที่พบบ่อย

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

หัวข้อที่เกี่ยวข้อง

แหล่งข้อมูล

การนำทาง

ค้นหาในวิกิ...