ชื่อระดับแรก
ชื่อรอง
1.1 AMM
ที่ระดับอัลกอริธึม AMM นั้น Uniswap V4 ไม่ได้แก้ไข V3 และยังคงใช้อัลกอริธึมสภาพคล่องตามผลคูณคงที่ x*y=k
ใน Uniswap V3 แต่ละคู่การซื้อขายสามารถมีได้ 4 พูล (เดิมคือ 3 และพูล 1 bp ใหม่ถูกเพิ่มในภายหลัง) ซึ่งเป็นตัวแทนของพูลที่มีอัตรา 0.01%, 0.05%, 0.3% และ 1% ตามลำดับ พูลเหล่านี้ ช่องว่างเครื่องหมายที่สอดคล้องกัน ก็แตกต่างกันเช่นกัน เมื่อสร้างพูล จะสามารถเลือกได้เพียง 1 ใน 4 ประเภทนี้เท่านั้น
ใน Uniswap V4 แต่ละคู่การซื้อขายสามารถมีจำนวนพูลเท่าใดก็ได้ตามทฤษฎี และอัตราค่าธรรมเนียมของแต่ละพูลอาจเป็นค่าใดก็ได้ และพื้นที่ขีดของพูลเหล่านี้อาจเป็นค่าใดก็ได้
ชื่อรอง
1.2 Hooks
Hooks คือชุดสัญญาที่พัฒนาโดยบุคคลที่สามหรือเจ้าหน้าที่ของ Uniswap เมื่อสร้าง Pool พูลสามารถเลือกผูก Hook ได้ หลังจากนั้น ในขั้นตอนเฉพาะของธุรกรรม พูลจะเรียกสัญญา Hook ที่ถูกผูกไว้โดยอัตโนมัติ Uniswap V4 กำหนดขั้นตอนเหล่านี้ซึ่งโค้ดสัญญา hook สามารถดำเนินการได้:
- beforeInitialize 
- afterInitialize 
- beforeModifyPosition 
- afterModifyPosition 
- beforeSwap 
- afterSwap 
- beforeDonate 
- afterDonate 
หมายความว่าสามารถเรียกสัญญาเบ็ดได้ก่อนและหลังการดำเนินการ เช่น การเริ่มต้นพูล การเพิ่ม/ลบสภาพคล่อง การซื้อขาย และการบริจาค
สัญญา Hook จำเป็นต้องระบุอย่างชัดเจนว่าขั้นตอนใดข้างต้นที่จะดำเนินการ และพูลจำเป็นต้องทราบว่าจำเป็นต้องดำเนินการ Hook ที่เกี่ยวข้องในขั้นตอนใดขั้นตอนหนึ่งหรือไม่ เพื่อประหยัดน้ำมัน ธงเหล่านี้จะไม่ถูกจัดเก็บไว้ในสัญญา แต่ ต้องการให้ Hook ใช้เฉพาะเพื่อระบุที่อยู่ รหัสการตัดสินเฉพาะมีดังนี้:


จะเห็นได้ว่า 8 บิตแรกของที่อยู่ Hook ไม่ได้ถูกใช้เพื่อทำเครื่องหมายว่าจำเป็นต้องดำเนินการ Hook ในขั้นตอนเฉพาะหรือไม่
ดังนั้น ผู้พัฒนา Hook จำเป็นต้องสร้างที่อยู่ที่ตรงตามข้อกำหนดของพูลเมื่อปรับใช้สัญญา ซึ่งโดยปกติต้องใช้การคำนวณ Create 2 + ของ Salt แบบสุ่มเพื่อให้บรรลุผล
นี่คือตัวอย่างการดำเนินการของ Hook จากเอกสารไวท์เปเปอร์:

ชื่อรอง
1.3 อัตราส่วนค่าธรรมเนียมแบบไดนามิก
นอกเหนือจากการรันโค้ดในขั้นตอนเฉพาะแล้ว Hook ยังสามารถกำหนดอัตราค่าธรรมเนียมการแลกเปลี่ยนและอัตราการถอนเงินของพูลบางแห่งได้ อัตราการถอนหมายถึงอัตราที่ผู้ใช้ต้องจ่ายให้กับ Hook เมื่อถอนสภาพคล่อง นอกจากนี้ Hook ยังสามารถระบุค่าธรรมเนียมการแลกเปลี่ยนส่วนหนึ่งได้ด้วยตัวมันเอง
เมื่อสร้างพูล คุณต้องใช้พารามิเตอร์ค่าธรรมเนียม 4 บิตแรก (uint 24) เพื่อทำเครื่องหมายว่าพูลใช้ค่าธรรมเนียมแบบไดนามิกหรือไม่ และจะเปิดใช้งานค่าธรรมเนียม hook Swap และถอนค่าธรรมเนียมหรือไม่:

หากเปิดใช้งานค่าธรรมเนียมแบบไดนามิก พูลจะเรียกสัญญา Hook เพื่อรับอัตราส่วนค่าธรรมเนียมการแลกเปลี่ยนปัจจุบันก่อนการแลกเปลี่ยนแต่ละครั้ง สัญญา Hook จำเป็นต้องใช้ฟังก์ชัน getFee() เพื่อส่งคืนอัตราส่วนค่าธรรมเนียมการแลกเปลี่ยนปัจจุบัน
ชื่อรอง
1.4 สัญญาซิงเกิลตัน
ทุกครั้งที่สร้างพูลใหม่ใน Uniswap V3 จะต้องปรับใช้สัญญาใหม่ ซึ่งสิ้นเปลืองทรัพยากรมาก แต่จริงๆ แล้วโค้ดที่ใช้โดยพูลเหล่านี้เหมือนกัน มีเพียงพารามิเตอร์การเริ่มต้นเท่านั้นที่แตกต่างกัน Uniswap V4 แนะนำสัญญา Singleton เพื่อจัดการพูลทั้งหมด ดังนั้นการสร้างพูลใหม่จึงไม่จำเป็นต้องปรับใช้สัญญาใหม่อีกต่อไป ซึ่งช่วยประหยัดทรัพยากรในการปรับใช้สัญญา
นอกจากนี้ ข้อดีของการใช้สัญญา Singleton ก็คือสามารถลดการถ่ายโอนโทเค็นระหว่างการทำธุรกรรมได้ เนื่องจากพูลทั้งหมดอยู่ในสัญญาเดียวกัน ดังนั้นการแลกเปลี่ยนข้ามพูลจึงสามารถดำเนินการให้เสร็จสิ้นได้โดยตรงภายในสัญญา และใน V3 การแลกเปลี่ยนข้ามพูล จำเป็นต้องถ่ายโอนโทเค็นระหว่างพูลต่างๆ ซึ่งจะเพิ่มก๊าซ
ชื่อรอง
1.5 extload
ชื่อรอง
1.6 Flash Accounting
เพื่อลดการถ่ายโอนโทเค็นระหว่าง Pool Swap V4 ยังใช้วิธีการที่เรียกว่า Flash Accounting เพื่อสร้างมาตรฐานกระบวนการ Swap เพิ่ม/ลบสภาพคล่อง/Flash Loan เข้าสู่กระบวนการที่คล้ายกับ Flash Loan:
(1) ผู้ใช้ได้รับการล็อค
(2) ผู้ใช้ดำเนินการใดๆ เช่น สลับในหลายพูล เพิ่ม/ลบสภาพคล่อง หรือยืมโทเค็นจากพูลผ่านสินเชื่อแฟลช
(3) การถ่ายโอนโทเค็นที่สร้างโดยการดำเนินการของผู้ใช้ทั้งหมดจะถูกบันทึกไว้ในการล็อค
(4) หลังจากการดำเนินการทั้งหมดเสร็จสิ้น ผู้ใช้สามารถนำโทเค็นที่เขาได้รับออกไปได้ และในขณะเดียวกันก็ต้องชำระโทเค็นที่เขาต้องจ่ายซึ่งบันทึกไว้ในล็อค
กระบวนการเหล่านี้จำเป็นต้องเกิดขึ้นในธุรกรรมเดียว
ชื่อรอง
1.7 ERC 1155 mint/burn
Flash Accounting สามารถลดการโอนโทเค็นของ Swap ในธุรกรรมเดียวกันได้ การใช้โทเค็น ERC 1155 จะสามารถลดการโอนโทเค็นของหลายธุรกรรมได้อีก
V4 ช่วยให้คุณบันทึกโทเค็นของคุณในสัญญา V4 ผ่าน ERC 1155 mint เพื่อให้คุณสามารถใช้โทเค็นเหล่านี้ในธุรกรรมหลายรายการโดยไม่ต้องโอนโทเค็นไปยังสัญญา V4 ทุกครั้ง
โทเค็นที่เก็บไว้ในสัญญา V4 สามารถถอนออกได้โดยใช้ ERC 1155 burn
ชื่อระดับแรก
ชื่อรอง
2.1 TWAMM (ผู้ดูแลสภาพคล่องอัตโนมัติแบบถ่วงน้ำหนักตามเวลา)
Alice ต้องการซื้อ ether มูลค่า 100 ล้านดอลลาร์บน blockchain การดำเนินการตามคำสั่งขนาดนี้บนแพลตฟอร์มผู้สร้างสภาพคล่องอัตโนมัติ (AMM) ที่มีอยู่ เช่น Uniswap จะมีราคาแพงมาก เนื่องจากแพลตฟอร์มเหล่านี้มีแนวโน้มที่จะเรียกเก็บค่าธรรมเนียมที่สูงเกินไปของ Alice เพื่อป้องกันไม่ให้เธอใช้ข้อมูลภายในเพื่อให้ได้ราคาที่ดีขึ้น
เพื่อให้ได้ราคาที่ดีขึ้น ตัวเลือกที่ดีที่สุดของ Alice คือการแบ่งคำสั่งซื้อออกเป็นคำสั่งซื้อย่อยเล็กๆ หลายรายการด้วยตนเอง และดำเนินการทีละขั้นตอนภายในเวลาไม่กี่ชั่วโมง แนวคิดคือการให้เวลาแก่ตลาดเพียงพอในการตระหนักว่าเธอไม่มีข้อมูลภายในและเสนอราคาที่ดีกว่าให้กับเธอ อย่างไรก็ตาม แม้ว่าเธอจะส่งคำสั่งซื้อย่อยที่มีขนาดใหญ่กว่าหลายรายการ คำสั่งซื้อย่อยแต่ละรายการจะยังคงมีผลกระทบอย่างมีนัยสำคัญต่อราคา ขณะเดียวกันก็มีความเสี่ยงที่จะถูก การโจมตีแบบแซนด์วิช จากผู้ค้าที่ไม่เป็นมิตร
TWAMM แก้ไขปัญหานี้ด้วยการทำธุรกรรมในนามของอลิซ โดยแบ่งคำสั่งซื้อของเธอออกเป็นคำสั่งซื้อเสมือนเล็กๆ จำนวนอนันต์ เพื่อให้การดำเนินการเป็นไปอย่างราบรื่นทันเวลา ในเวลาเดียวกัน TWAMM ใช้ความสัมพันธ์ทางคณิตศาสตร์พิเศษของโปรโตคอล AMM ที่ฝังไว้เพื่อให้สามารถแบ่งปันต้นทุนก๊าซให้กับคำสั่งซื้อเสมือนเหล่านี้ได้ เนื่องจาก TWAMM ประมวลผลธุรกรรมระหว่างบล็อก จึงไม่เสี่ยงต่อ การโจมตีแบบแซนวิช
โดยรวมแล้ว TWAMM ช่วยให้ Alice มีวิธีที่มีประสิทธิภาพมากขึ้นในการทำธุรกรรมขนาดใหญ่ หลีกเลี่ยงค่าธรรมเนียมที่สูงและการปั่นป่วนตลาดที่อาจเกิดขึ้น
2.1.1 หลักการ
TWAMM มี AMM ในตัว ซึ่งไม่แตกต่างจาก AMM อื่นๆ ผู้ใช้สามารถดำเนินธุรกรรมทันทีผ่าน AMM นี้หรือเพิ่มสภาพคล่องได้ อย่างไรก็ตาม TWAMM ยังมีกลุ่มคำสั่ง TWAP สองกลุ่ม ซึ่งใช้ในการดำเนินการคำสั่ง TWAP ในสองทิศทาง เมื่อผู้ใช้ส่งคำสั่งซื้อ ให้ระบุปริมาณอินพุตโทเค็นและระยะเวลาของธุรกรรม จากนั้น TWAMM จะวางลำดับของทิศทางธุรกรรมเดียวกัน ลงในพูลที่เกี่ยวข้อง และทำธุรกรรมโดยอัตโนมัติตามความเร็วธุรกรรมที่ระบุ เมื่อคำสั่งซื้อของผู้ใช้ได้รับการดำเนินการอย่างสมบูรณ์ ผู้ใช้สามารถนำโทเค็นที่ได้รับจากธุรกรรมออกมาได้ แน่นอนว่าก่อนที่คำสั่งซื้อของผู้ใช้จะถูกดำเนินการ ผู้ใช้ยังสามารถยกเลิกคำสั่งซื้อล่วงหน้าหรือแก้ไขจำนวนโทเค็นที่คำสั่งซื้อจำเป็นต้องซื้อขายได้
ใน Ethereum สัญญาอัจฉริยะสามารถถูกกระตุ้นโดยธุรกรรมที่เริ่มต้นโดยที่อยู่ EOA เท่านั้น และไม่สามารถดำเนินการได้โดยอัตโนมัติ ดังนั้น TWAMM จำเป็นต้องส่งธุรกรรมจากบัญชี EOA เป็นระยะเพื่อชำระโทเค็นที่จะซื้อขายในกลุ่มคำสั่งซื้อ ซึ่งต้องใช้บัญชีผู้รักษาในการดำเนินการธุรกรรมเหล่านี้
แน่นอนว่า TWAMM ยังสามารถชำระกลุ่มคำสั่งซื้อโดยอัตโนมัติทุกครั้งที่ผู้ใช้โต้ตอบด้วย ซึ่งจะช่วยประหยัดค่าใช้จ่ายของผู้รักษา ซึ่งเป็นวิธีทั่วไปสำหรับโปรโตคอล DeFi ในการประมวลผลข้อมูลการสตรีม
2.1.2 เหตุใดรูปแบบการซื้อขายนี้จึงถูกโจมตีด้วยแซนด์วิชได้ยาก?
การโจมตีประเภทนี้ทำได้ยาก เนื่องจากการประทับเวลาในบล็อกจะไม่เปลี่ยนแปลง ผู้โจมตีจะต้องเพิ่มราคาพูลในธุรกรรมล่าสุดของบล็อก เพื่อให้การชำระหนี้ TWAMM ในบล็อกถัดไปได้รับผลกระทบ อิทธิพล สิ่งนี้ต้องการให้การโจมตีแบบแซนวิชเกิดขึ้นในหลายบล็อก ซึ่งไม่ต้องสงสัยเลยว่าจะนำความเสี่ยงอย่างมากมาสู่ผู้โจมตี เนื่องจากอนุญาโตตุลาการรายอื่นอาจเข้ามาแทรกแซงตรงกลาง ทำให้ผู้โจมตีได้รับความสูญเสีย
ในเวลาเดียวกัน เนื่องจากการมีอยู่ของอนุญาโตตุลาการ การปั่นราคาดังกล่าวจึงไม่ยั่งยืน เนื่องจากลักษณะของคำสั่ง TWAP มันจะไม่แลกเปลี่ยนโทเค็นมากเกินไปในช่วงเวลาสั้น ๆ ดังนั้นในกรณีส่วนใหญ่จะมีการขาดทุน จะต้องถูกจำกัด
2.1.3 เวิร์กโฟลว์ TWAMM ใน V4
(1) Hook นี้รักษากลุ่มคำสั่ง TWAP สองกลุ่ม ซึ่งแสดงถึงลำดับ TWAP ของสองทิศทางการทำธุรกรรมตามลำดับ
(2) ผู้ใช้สามารถส่งคำสั่ง TWAP ผ่าน Hook นี้ และจำเป็นต้องระบุโทเค็น ปริมาณ และระยะเวลาของธุรกรรม
(3) Hook นี้ลงทะเบียน beforeSwap และ beforeModifyPosition และ Hook นี้จะถูกทริกเกอร์ทุกครั้งที่ผู้ใช้ซื้อขายหรือปรับตำแหน่ง
(4) หลังจากที่ถูกทริกเกอร์ Hook จะรับผิดชอบในการชำระบัญชีของกลุ่มคำสั่ง TWAP 2 รายการ
(5) ผู้ใช้ยังสามารถทริกเกอร์การชำระบัญชีด้วยตนเองได้ตลอดเวลา
(6) ผู้ใช้สามารถยกเลิกหรือแก้ไขปริมาณโทเค็นในคำสั่ง TWAP
2.1.4 ตัวอย่างโดยละเอียด
TWAMM ลงทะเบียนสามเฟสสำหรับการเรียก hooks แบบลอจิก เริ่มต้น TWAMM ก่อนการเริ่มต้นพูล และทริกเกอร์ hook นี้ทุกครั้งที่ผู้ใช้ซื้อขายหรือปรับตำแหน่ง

ผู้ใช้สามารถเรียกใช้ฟังก์ชัน sendOrder ใน TWAMM ด้วยตนเองเพื่อส่งคำสั่งซื้อที่ต้องการดำเนินการตามสัญญา

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

ทุกครั้งที่ผู้ใช้เรียกใช้ฟังก์ชัน swap ของ v4 เพื่อแลกเปลี่ยนหรือฟังก์ชัน modifiedPosition เพื่อเปลี่ยนตำแหน่ง ฟังก์ชันการดำเนินการใน TWAMM จะถูกทริกเกอร์ และฟังก์ชันภายใน _executeTWAMMOrders จะถูกเรียกใช้ในฟังก์ชันเพื่อดำเนินการดำเนินการตามคำสั่งที่ยังไม่เสร็จก่อนหน้านี้ต่อไป .
_executeTWAMMOrders ฟังก์ชัน



ชื่อรอง
2.2 Limit Order
ต่างจากคำสั่งตลาดซึ่งจะดำเนินการทันทีที่ราคาตลาดสุดท้าย คำสั่งจำกัดจะดำเนินการทันทีที่ถึงราคาที่กำหนดไว้ล่วงหน้า DEX ส่วนใหญ่ที่ใช้ผู้สร้างสภาพคล่องอัตโนมัติ (AMM) เลือกระบบคำสั่งของตลาดตามค่าเริ่มต้น ง่ายและเข้าใจง่ายสำหรับผู้มาใหม่ คำสั่งซื้อของตลาดได้รับการดำเนินการหรือล้มเหลวเนื่องจากพารามิเตอร์ต่างๆ เช่น ผลกระทบต่อราคาสูงสุด ในคำสั่งจำกัด คำสั่งจะถูกกรอกเมื่อราคาสินทรัพย์ถึงราคาจำกัดเท่านั้น มิฉะนั้น คำสั่งจะยังคงเปิดอยู่
ตัวอย่างเช่น สมมติว่าปัจจุบัน ETH ซื้อขายที่ 1 ETH = 1500 DAI ในกลุ่ม ETH/DAI ผู้ใช้สามารถวางคำสั่ง Take Profit ได้ โดยมีเนื้อหาหลักๆ คือ"หาก 1 ETH = 2,000 DAI ให้ขาย ETH ทั้งหมดของฉัน". หากถึงราคานี้ ETH ของผู้ใช้จะถูกสลับเป็น DAI ออนไลน์เต็มรูปแบบโดยอัตโนมัติในลักษณะกระจายอำนาจ
ใน Uniswap เวอร์ชันก่อนหน้า คำสั่งจำกัดนั้นแทบจะเป็นไปไม่ได้เลย AMM ส่วนใหญ่อนุญาตให้มีการซื้อและขายในตลาดเท่านั้น ในเวอร์ชัน V4 เนื่องจากคุณสมบัติอันทรงพลังและความสามารถในการปรับขนาดของ hooks จึงมีพื้นฐานสำหรับการดำเนินการตามคำสั่งจำกัดในเวอร์ชัน 4
2.2.1 หลักการ
หลักการออกแบบของ Limit Order นั้นง่ายกว่าของ twamm ปัจจุบันมีการใช้ Limit Order สำหรับการเพิ่มสภาพคล่องและการดำเนินการของ Limit Order สำหรับการซื้อขายจะง่ายขึ้น
เนื่องจากมี TickLower และ TickUpper ใน v4 และตามการเปลี่ยนแปลงในเงื่อนไขการซื้อขายของพูล ล่างและบนจะเปลี่ยนไป เมื่อผู้ใช้เพิ่มสภาพคล่อง พวกเขาไม่ต้องการเพิ่มในราคาปัจจุบัน ในเวลานี้ พวกเขาสามารถ ใช้ลิมิต Order hook เพื่อดำเนินการตามข้อกำหนดนี้ กำหนดราคาที่สอดคล้องกันใน hook หลังจากแต่ละสวอป hook จะตัดสินราคาพูลปัจจุบัน หากถึงราคาที่ตั้งไว้ สภาพคล่องที่เกี่ยวข้องจะถูกเพิ่มเพื่อรับรายได้
2.2.2 ขั้นตอนการทำงาน Limit Order ใน V4
1. Limit จะรักษาหลายยุคไว้เป็นคำสั่งจำกัดสำหรับระดับล่างและทิศทางการซื้อขายที่แตกต่างกัน
2. ผู้ใช้ส่งราคาที่ต่ำกว่าและทิศทางธุรกรรมผ่านเบ็ดนี้ และเพิ่มคำสั่งจำกัดลงในสัญญา
3. Hook นี้จะลงทะเบียน afterSwap ซึ่งจะถูกทริกเกอร์เมื่อราคาเปลี่ยนแปลงหลังจากแต่ละ swap สิ้นสุดลงเท่านั้น
4. หลังจากถูกทริกเกอร์ Hook จะตรวจสอบช่วงราคาปัจจุบัน และตรวจสอบจากยุคว่ามีคำสั่งจำกัดที่ต้องเพิ่มสภาพคล่องในราคาปัจจุบันหรือไม่
5. ผู้ใช้สามารถถอนเงินหรือเพิ่มสภาพคล่องโดยตรงได้ตลอดเวลา
2.2.3 ตัวอย่างโดยละเอียด
hook จะถูกทริกเกอร์ในสองขั้นตอนของการลงทะเบียนสัญญา hook จะถูกเตรียมใช้งานหลังจากพูลถูกเตรียมใช้งาน และตรรกะของ hook ถูกทริกเกอร์หลังจากการแลกเปลี่ยนแต่ละครั้ง


ผู้ใช้เรียกใช้ฟังก์ชัน place เพื่อส่งผ่านปริมาณ ราคา และทิศทางธุรกรรมของสภาพคล่องที่ผู้ใช้ต้องการเพิ่ม ขั้นแรก hook จะเพิ่มสภาพคล่องที่ผู้ใช้ต้องการเพิ่มลงในพูลสำหรับการจัดเก็บ จากนั้นจึงสร้าง คำสั่งจำกัดที่สอดคล้องกันสำหรับผู้ใช้

hook นี้จะถูกทริกเกอร์หลังจากแต่ละสวอปสิ้นสุดลง และการดำเนินการเพิ่มสภาพคล่องจะเสร็จสมบูรณ์ตามลำดับจำกัดที่มีอยู่ในช่วงราคาตามช่วงราคาปัจจุบัน


ก่อนที่คำสั่งจำกัดจะเสร็จสมบูรณ์ ผู้ใช้สามารถเรียกใช้ฟังก์ชัน kill เพื่อยกเลิกคำสั่งจำกัดและรับประโยชน์จากการเพิ่มสภาพคล่องในครั้งนี้

เมื่อผู้ใช้ต้องการลบสภาพคล่อง พวกเขาสามารถเรียกใช้ฟังก์ชันการถอนเพื่อถอนสภาพคล่องที่ต้องการได้
โดยทั่วไป Limit Order Hook นี้ช่วยให้ผู้ใช้มีวิธีที่สะดวกยิ่งขึ้น ผู้ใช้สามารถกำหนดราคาได้เมื่อต้องการเพิ่มสภาพคล่อง หลังจากช่วงราคาใน Pool ถึงราคา Hook จะเข้าสู่ Pool โดยอัตโนมัติสำหรับผู้ใช้ดำเนินการ การดำเนินการเพิ่มสภาพคล่องและผู้ใช้สามารถยกเลิกและถอนสภาพคล่องได้ตลอดเวลา
นอกเหนือจาก TWAMM และ Limit Order แล้ว ฟังก์ชันต่างๆ เช่น การลงทุน LP ใหม่และการเปลี่ยนแปลงค่าธรรมเนียมแบบไดนามิกยังสามารถรับรู้ได้โดยอิงจาก Hook เนื่องจากเหตุผลด้านพื้นที่ เราจะแนะนำฟังก์ชันเหล่านี้ในการวิเคราะห์ติดตามผล:
การลงทุน LP ใหม่: ผู้ใช้สามารถใช้ hooks เพื่อเพิ่ม แก้ไข และลบสภาพคล่อง และ hooks สามารถลงทะเบียน afterSwap และ afterModifyPosition เพื่อโทรได้ เนื่องจากผู้ใช้ใช้ hooks อย่างสม่ำเสมอเพื่อเพิ่มสภาพคล่อง ที่อยู่เดียวที่เพิ่มสภาพคล่องใน poolManager คือ hook hook สามารถตรวจสอบเวลาปัจจุบันทุกครั้งที่มันถูกทริกเกอร์ หลังจากช่วงระยะเวลาหนึ่ง เลือกที่จะถอนรางวัลสภาพคล่องและรับ lp โทเค็นจะเพิ่มสภาพคล่องให้กับพูลอีกครั้งเพื่อเพิ่มประสิทธิภาพรายได้ของผู้ใช้โดยอัตโนมัติ
ชื่อระดับแรก

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

หลีกเลี่ยงการใช้ฟังก์ชันทำลายตัวเอง
หลีกเลี่ยงการใช้ฟังก์ชัน selfdestruct ใน hook หากฟังก์ชัน self-destruct ถูกเรียกใช้ใน hook จะไม่เพียงแต่ทำให้เกิดปัญหาในตรรกะใน hook เท่านั้น แต่ยังทำให้ฟังก์ชันในพูลล้มเหลว ทำให้ทรัพย์สินใน พูลทั้งหมดจะหายไปและฟังก์ชันล้มเหลว ทำงานอย่างถูกต้อง
การควบคุมการเข้าถึงที่เข้มงวด
ควบคุมสิทธิ์ในสัญญา hook อย่างเคร่งครัดเพื่อหลีกเลี่ยงบทบาทที่มีสิทธิ์มากเกินไป และดำเนินการจัดการหลายลายเซ็นบนบทบาทที่มีสิทธิพิเศษเพื่อป้องกันการโจมตีแบบจุดเดียว เพื่อหลีกเลี่ยงสถานการณ์ที่บทบาทที่มีสิทธิพิเศษสามารถแก้ไขตัวแปรสถานะสัญญาโดยพลการ ข้อผิดพลาดทางตรรกะอาจเกิดขึ้นและทำให้ธุรกรรมทั้งหมดถูกย้อนกลับ ซึ่งส่งผลต่อการใช้งานตามปกติของพูล ในการตรวจสอบหลักการของสิทธิ์ขั้นต่ำ เราควรใช้สัญญา AccessControl ของ openzeppelin เพื่อใช้สิทธิ์แบบละเอียดมากขึ้นในการควบคุมการเข้าถึง เนื่องจากแนวทางปฏิบัตินี้จำกัดแต่ละองค์ประกอบของระบบให้เป็นไปตามหลักการของสิทธิ์ขั้นต่ำ
ทำหน้าที่จำกัดการต่อต้านการกลับเข้ามาใหม่ให้ดี
ในฐานะที่เป็นโค้ดส่วนขยายภายนอกของ Pool hooks ควรให้ความสนใจกับการโจมตีการกลับเข้ามาใหม่ที่เป็นไปได้ในสัญญา เช่น การโจมตีการกลับเข้าที่เป็นไปได้ที่เป็นไปได้ในคำสั่งที่จำกัดเมื่อถ่ายโอนโทเค็นดั้งเดิม ส่งผลให้สูญเสียทรัพย์สินของสัญญา ตรวจสอบและพยายามอัปเดตสถานะทั้งหมดก่อนที่จะเรียกสัญญาภายนอกหรือรูปแบบที่เรียกว่า ตรวจสอบ-ตรวจสอบ-โต้ตอบ ด้วยวิธีนี้ แม้แต่การกลับเข้ามาใหม่ก็จะไม่มีผลใดๆ เนื่องจากการอัปเดตสถานะทั้งหมดเสร็จสิ้นแล้ว .
การควบคุมการอัพเกรดสัญญา
ชื่อระดับแรก
About Us
เว็บไซต์อย่างเป็นทางการ:
เว็บไซต์อย่างเป็นทางการ:https://www.sharkteam.org
Twitter:https://twitter.com/sharkteamorg
Discord:https://discord.gg/jGH9xXCjDZ
Telegram:https://t.me/sharkteamorg


