لماذا "موافقة الرمز" هي أسوأ فكرة في DeFi.
حصل ERC-20 على الرمز الصحيح والجزء الصعب خطأ. لقد قيّم التوازنات والتحويلات، لكنه لم يُقدّم أبدًا طريقة نظيفة لاستخدام العقد لرموزك. لا يُبلغ التحويل العادي إلى عقد أي شيء بأنه وصل. لذا تم إضافة إصلاح عاجل: approve + transferFrom.
انظر إلى ما يفرضه هذا الإصلاح العاجل عليك. لتمكين عقد من إنفاق رموزك، عليك إما:
- الموافقة مرة واحدة على مبلغ كبير أو غير محدود، والآن يمكنه الوصول إلى محفظتك متى شاء، إلى الأبد، حتى تتذكر إلغاء الموافقة. أنت تثق بعقد ربما لم تقرأه قط.
- أو الموافقة على المبلغ الدقيق قبل كل عملية، مما يعني معاملة ثانية ورسوم غاز ثانية لكل عملية.
تثق بغرباء، أو تدفع ضريبة على كل تحرك. هذان هما الخياران، ولا تقدم المعيار أي شيء أفضل. لذا يختار الجميع الباب الأول وينقر على "غير محدود"، وتمتلئ السلسلة بمحافظ تشير مسدسات مشحونة نحو أنفسها.
ليس نظريًا. فقد روبوت MEV jaredfromsubway ملايين بهذه الطريقة. لم يُخترق شيء. لقد منح موافقات في مطاردة تداولات وهمية، واستخدم أحدهم transferFrom لسحب الأموال.
أسوأ جزء: كان هناك تصميم أفضل طوال الوقت. transfer-and-call (ERC-223, ERC-1363) ينقل المبلغ الدقيق ويُبلغ المستلم في معاملة واحدة. لا حاجة لموافقة دائمة، ولا معاملة إضافية، ولا غريب يحمل مفتاح حسابك. خسر أمام التقدم المبكر لـ ERC-20، والآن أصبحت الموافقات غير المحدودة حجر أساس في كل DeFi. permit، permit2، تجريد الحساب، كل "إصلاح" هو لاصق على مبدأ كان ينبغي ألا يُطلق أصلًا.
لم نحصل على الخيار الآمن. حصلنا على الخيار المريح، ونُدفع ثمنه منذ ذلك الحين.