ถ้าจำได้ในบทความการฟาร์มจะมี popup ที่ทำหน้าที่ ให้ความยินยอม ในการให้ smart contract เข้าถึง token นั้นๆของเราได้ ซึ่งเป็นขั้นตอนพื้นฐานก่อนทำขั้นตอนต่อไป ไม่ว่าจะเป็นการ swap, deposit หรือ stake ก็ตาม โดยทำครั้งแรกครั้งเดียวในแต่ละ smart contract กับแต่ละ token เท่านั้น
ถ้าจะพูดให้เข้าใจง่ายๆ คือเราต้องอนุญาตให้ smart contract เข้าถึง เหรียญเราได้ โดยส่วนใหญ่เค้าจะร้องขอไม่จำกัดจำนวน (เพื่อความสะดวกของเราเอง) เนื่องจากถ้าเรายินยอมให้น้อยเช่น 100 แต่เรา deposit 200 แบบนี้ transaction นั้นจะ fail แน่นอน เพราะระบบจะตรวจสอบให้แน่ชัดว่าเรายินยอมให้เข้าถึงได้ 200 จริงหรือไม่ ไม่จริงก็ยกเลิก เพื่อความปลอดภัยนั่นเอง
ซึ่งกระบวนการนี้คือ Allow หน้าตา popup จะเป็นแบบนี้
ทีนี้มีเหตุหลายครั้งที่ผมเคยได้ยินมา ว่าการไปฟาร์มสายซิ่ง แล้วเลิกฟาร์มไปแล้ว แต่อยู่ดีๆ โดนล้วงเหรียญออกจากกระเป๋าไปได้อีก ทั้งๆที่เลิกฟาร์มมานานแล้ว
สืบสาวได้ความว่า smart contract ของฟาร์มนั้นตั้งใจเขียนโค้ดให้รองรับคำสั่งพิเศษเข้าไปผ่านตัวแปร ซึ่งถ้าเราอ่านโค้ดตามปกติจะไม่เห็นข้อผิดปกติเลย และเมื่อเจ้าของ platform ตั้งใจจะขโมย ก็สั่งรันโค้ดพิเศษนั้นเพื่อดึงเหรียญของคนที่เคยฟาร์มออกจากกระเป๋าไปเฉยเลย หรือบางที่ก็มีโค้ดตัวนี้วางไว้เลยตั้งใจจะเอาไปเลย ก็มี
การให้ Allow และความเสี่ยง
การ allow นั้น จะกระทำต่อ 1 Token ต่อ 1 Smart contract ต่อ 1 ครั้งเท่านั้น เช่น BUSD ให้ pancakeswap เราต้อง allow 1 ที ต่อมาเราไป apeswap มี DEX ของตัวเอง ก็ต้อง allow BUSD ให้ apeswap อีก 1 ที ดังนั้น ถ้าเรา revoke ความสัมพันธ์ระหว่าง BUSD ที่มีกับ pancakeswap แล้ว แต่ความสัมพันธ์ของ BUSD ที่มีต่อ apeswap ยังคงอยู่
และความเสี่ยง ก็จะเกิดได้บนความสัมพันธ์นั้นๆ เท่านั้น (ไม่อย่างนั้นคงไม่ต้องแยก allow) กล่าวคือ ถ้าให้ความสัมพันธ์ระหว่าง BUSD กับ pancakeswap แล้ว pancakeswap ก็กระทำได้กับ BUSD เท่านั้น เหรียญอื่นไม่เกี่ยว
และความเสี่ยง ก็เกิดกับจำนวนที่ allow ให้เท่านั้น เกินกว่านั้นไม่ได้ เช่น allow BUSD ให้ pancakeswap 1000 แล้วเราใช้ไป 700 ความเสี่ยงที่เหลือคือ 300 บน BUSD เท่านั้น
วิธียกเลิก Allow คือ Revoke
ทีนี้อยากให้เข้าใจก่อนว่า revoke คืออะไร ทำงานยังไง เพราะหลายคนจะ revoke อย่างเดียวโดยไม่เข้าใจอะไร หรือตั้ง Allow ผิดจนฟาร์มไม่ได้ก็มี
การให้ Allow คือการยินยอมด้วยจำนวนที่กำหนด แต่ปกติเค้าจะตั้งไว้เยอะมากจนถือได้ว่า unlimited เลย แต่อย่างไรก็ตามจำนวนที่กำหนด ต้องมากกว่าจำนวนที่เราจะ take action ด้วย ไม่อย่างนั้น fail แน่นอน
การ revoke คือการตั้งค่าการยินยอมให้เป็น 0 ซึ่งหมายความว่า ไม่ให้ความยินยอมอีกแล้ว เพราะจำนวนเป็น 0 ก็ทำอะไรไม่ได้อีกแล้วนั่นเอง ดังนั้น smart contract นั้นจะเข้ามาทำอะไรกับเหรียญเราไม่ได้อีก ผลที่ตามมาก็คือ เราจะไม่สามารถ deposit, swap หรือ stake และ unstake ได้อีก แต่เรายังคงความเป็นเจ้าของอยู่ในกรณีที่ revoke หลังจากที่ stake ถ้าเราจะ unstake เราต้อง allow อีกครั้ง
ข้อแนะนำในการ revoke
- เมื่อ stake แล้วสามารถ revoke ได้เลยทันที ถ้าจะ stake, unstake ก็ต้อง allowance อีกครั้ง แล้วก็ revoke อีกทีได้
- revoke บน platform ที่เรารู้สึกไม่มั่นใจ หรือความมั่นใจต่ำๆหน่อย จริงๆแล้วเราจะ revoke ทุก plaform ที่ใช้งานเลยก็ได้ แต่ก็จะเปลืองค่า gas fee เพราะถ้าครั้งต่อไปจะใช้อีก ก็ต้อง allow ใหม่อีก ดูจะเยอะไปหน่อย
- revoke ทำเมื่อไรก็ได้ที่อยากทำ แต่ถ้าทิ้งไว้นานๆจะลืมว่านี่คือ allow ของที่ไหนเอาไว้ แต่ก็อาจจะใช้เหตุ เพราะลืมไปแล้วงั้นก็ revoke ไปเลยแล้วกันก็ได้
- ถ้าเรา allow ให้ไว้ตามจำนวนที่เรา stake แล้วไม่ต้อง revoke ก็ได้ เพราะเค้าจะไม่สามารถมาเอาเพิ่มออกไปได้อีก แต่เช่นกัน เราก็ไม่สามารถ stake เพิ่มได้ ต้อง revoke ก่อนค่อย allow ใหม่อีกที
Revoke ได้ที่ไหน
bscscan.com/tokenapprovalchecker
อ่านเข้าใจง่ายที่สุดแล้ว มีชื่อกำกับเอาไว้บางตัวว่าเป็น contract ของที่ไหน
allowance.beefy.finance
เป็นที่ที่จำ url ได้ง่าย คนนิยมแนะนำตัวนี้กันมาก เพราะความจำง่ายนี่แหล่ะ กับเป็นส่วนหนึ่งของ beefy ที่หลายคนใช้งานกันอยู่แล้ว
unrekt.net
เป็นเว็บเดียวที่รองรับการ search ด้วย masterChef smart contract address, token contract address สำหรับคนที่มีรายการเยอะ เอา smart contract search เลย ง่ายและเร็วมาก
Revoke ยังไง
เชื่อมต่อเว็บกับกระเป๋าเรา เว้นแต่ bscscan ที่กรอก wallet address เข้าไปก่อน แลว้ค่อยเชื่อมจากนั้นก็เลือก revoke เลย
Revoke แล้วจะเงินหายมั้ย
ไม่ครับ เงินและฟาร์มทุกอย่างจะอยู่ที่เดิม ยังเก็บ reward (harvest) ได้เหมือนเดิม แต่อย่างที่บอก ถ้าจะ stake, swap, deposit หรือ unstake ก็ต้อง allow ใหม่ (ถ้ากลัวจัดๆ ก็ allow > ทำธุรกรรม > revoke ก็ได้)
น่าจะเข้าใจมากขึ้นแล้วนะครับ สำหรับการ revoke ไม่ใช่เอะอะก็จะ revoke กันอย่างเดียว หรือตั้งค่า allow ผิดจนฟาร์มกันไม่ได้ เสีย gas fee และวุ่นวายเสียเวลาไปอีก
เทคนิคการประหยัดค่า gas fee แบบปลอดภัย
เนื้อหาที่ซ่อน คือวิธีการที่เราไม่ต้อง revoke เพื่อ allow ใหม่ แต่เรายังสามารถใช้การตั้งค่า limit ให้เป็นประโยชน์ ในขณะที่ยังมีความปลอดภัยอยู่ และประหยัดค่า gas fee ได้อีกไปพร้อมๆกัน