يعمل التحكم الثلاثي على أنه استراتيجية في تداول تبادل العملات الرقمية، تستفيد من التغيرات في أسعار الصرف داخل سوق واحد أو عبر أسواق متعددة. تتكون هذه الطريقة من ثلاث صفقات متتالية: تبديل عملة رقمية أولية بعملة ثانية، الثانية بعملة ثالثة، وفي نهاية المطاف، العملة الثالثة بالعملة الأولية، كل ذلك بهدف تحقيق الربح. وبالتالي، يحتوي مصطلح "ثلاثي" على عملية ثلاثية الخطوات.
الصورة التي تم إنشاؤها بواسطة الذكاء الاصطناعي
على DEX، تتسبب الفرص المتاحة للتحكم الثلاثي عادةً في الفروقات في السيولة عبر عدة برك. عادةً ما تكون قصيرة المدى، وتستمر لبضع ثوانٍ أو حتى أقل، حيث يعدل الصرف بسرعة أي تفاوتات في التسعير. وبناءً على ذلك، يتم استخدام خوارزميات التداول التلقائي المزودة بتنفيذ سريع للاستفادة من هذه الفروقات العابرة. ولمساعدتك في فهم المفهوم، ها هو مثال:
الصفقة المثلثة الثلاثية تبدأ من 01 - شراء 1 wBTC بمبلغ 60,000 دولار أمريكي، تليها 02 - شراء 16 WETH بمقابل 1 wBTC وتنتهي بـ 03 - بيع 16 WETH مقابل 66,000 دولار أمريكي. في نهاية الرحلة، سنكون قد حصلنا على 6,000 دولار أمريكي كأرباح.
هناك نوعان من أساليب التبادل المتعددة المتاحة على Uniswap v3: الإدخال الدقيق والإخراج الدقيق. كما يوحي أسماؤهما، النوع الأول يتوقع رمزًا بمبلغ دقيق كإدخال للتبادل، وفي نهاية المطاف، سيتم إخراج رمز بمبلغ محدد بأسعار الصرف؛ يتوقع النوع الثاني مبلغًا محددًا بدقة كإخراج، وفقط الكمية الكافية من الرمز كإدخال يمكن أن تلبي التبادل بأسعار الصرف.
بطبيعة العمل التجاري للتحكم الثلاثي ، نود أن نأخذ رمزًا بكمية دقيقة كإدخال ، ونبدله في عملة رقمية أخرى ، ثم نبدله مرة أخرى إلى الرمز الأصلي للربح ، كما نتمنى.
address constant SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
عنوان ثابت WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
عنوان الثابت USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
contract MultiHopSwap { using SafeERC20 for IERC20;ISwapRouter02 private constant ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 private constant MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;function swapExactInputMultiHop(uint256 amountIn) external { IERC20(USDC).safeApprove(address(ROUTER), MAX_INT); IERC20(WETH).safeApprove(address(ROUTER), MAX_INT); IERC20(DAI).safeApprove(address(ROUTER), MAX_INT); bytes memory path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC) ; ISwapRouter02.ExactInputParams memory params = ISwapRouter02 .ExactInputParams({ path: path, recipient: address(this), amountIn: amountIn, amountOutMinimum: 1 }); ROUTER.exactInput(params); }}
تلعب أجهزة التوجيه دورًا حاسمًا في تسهيل توفير السيولة. نظرًا لأنها لا تحتفظ بالأرصدة المميزات ولا تحافظ على رصيد الرموز، يمكن استبدال أجهزة التوجيه بأمان. لهذا السبب، تحمل أجهزة التوجيه أرقام إصدار، تبدأ من 01. في تنفيذنا، نستخدم Router02 عند 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45على الشبكة الرئيسية.
SafeERC20 هو طبقة وقائية مبنية حول عمليات ERC20 ، مما يضمن تفاعل آمن مع رموز ERC20 داخل عقدنا. على عكس وظائف ERC20 العادية ، يعزز SafeERC20 السلامة عن طريق التحقق من القيم المرجعية البوليانية لعمليات ERC20. إذا فشلت أي عملية ، يتم عكس المعاملة ، مما يقلل من المخاطر. بالإضافة إلى ذلك ، يتكيف SafeERC20 مع رموز ERC20 غير القياسية التي تفتقد القيم المرجعية البوليانية ، مما يوفر المرونة والصلابة في إدارة الرموز. من خلال الموافقة على الحد الأقصى للمبلغ ، نسمح لـ Router02 بنقل الرموز نيابة عنا. دون ذلك ، يمكنك توقع رسالة خطأ STF حيث يعني STF أن التنفيذ يتم عكسه بواسطة تأكيد require في وظيفة TransferHelper.safeTransferFrom.
التالي، سنلقي نظرة على كيفية تحديد مسار مثلثي:
bytes ذاكرة path = abi.encodePacked(USDC، uint24(3000),
WETH، uint24(3000)، DAI، uint24(3000)، USDC) ;
من خلال abi.encodePacked، تقوم Solidity بتعبئة قيم متعددة بشكل محكم دون إضافة أي حشو. إنها ترتبط بيانات البيانات الثنائية الخام لكل معلمة. ليس من الصعب فهم أن المعلمات المتسلسلة تبادلت الرسوم بين أزواج العملات الرقمية. يبدأ المسار من USDC ويتوقف عند USDC متوقعًا ربحًا. ثم يتم لفه بواسطة ExactInputParams مع معلمات إلزامية أخرى وتغذيه في الموجه للتبادل المتعدد القفزات.
نستخدم نفس التقنية عن طريق تشعب الشبكة الرئيسية مع التنكر. بمجرد تحقق أن 10 USDC قد تم تأكيدها بأنها تمت اعتمادها على العقد، يمكن تشغيل تبديلات متعددة القفزات كما هو موضح أدناه:
it("ينفذ تبادلات متعددة القفزات", async () => {balance = await swap.tokenBalance(USDC);console.log(`الرصيد الحالي لـ USDC = ${balance}`);console.log(`جاري تبديل ${initialFundingHuman} USDC`);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(`الرصيد الحالي لـ USDC = ${balance}`);expect(balance).not.equal(0);});
يجب أن يبدو نتيجة الاختبار كما هو موضح أدناه:
الرصيد USDC للحوت: 170961218210457n
بدأ التنكر.
تم الانتهاء من التقمص.
الرصيد الحالي من USDC = 100000000
تبديل 100 USDC
الرصيد الحالي لليو أس دي سي = 91677417
بعد أن قفزنا من خلال الحلقات، خسرنا المال - من الواضح أن المسار بأسعار البقع لم يكن لصالحنا، ولكن تحصل على فكرة عن كيفية يجب أن يتم تنفيذ التحكيم الثلاثي باستخدام تبادلات متعددة على Uniswap v3.
هل لم أقلأقوى مصدر تمويل في نظام ال DeFi هو القرض الفلاشيلن تحتاج إلى الكثير من الإبداع لبناء استراتيجية تداول للتحكم الثلاثي ممولة بقرض فلاش باستخدام كل من قرض فلاش وتبادلات متعددة القفزات التي تعلمت عنها. يمكن شرح منطق مجتمع بواسطة رسم توضيحي تسلسلي محدث كما يلي:
مخطط تسلسلي للمراجحة الثلاثية الممولة من قرض فلاش على Uniswap v3 (تجاهل بعض العمليات للتبسيط)
تحقق من رمزي المصدري لكل من القرض الفلاشي والتبادلات متعددة الوجهات المنفذة على يونيسواب v3 —https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255, قم بتحليل رسم تسلسلي وقم بعمل واجبك الخاص لإنهاء تجميع العقود الذكية.
أول شيء نريد أن ننظر إليه هو المسار الذي يتكون من تسلسل الصفقات الثلاثة: لكي تكون مربحة ، يجب أن تكون 3 أزواج مناسبة من العملات المشفرة بالمعدلات الصحيحة. من أجل العثور على كل هذا الصواب ، تحتاج إلى تطوير برنامج يقوم بتبديل الأزواج القابلة للتداول في نمط المراجحة المثلثية ومحاكاة المقايضات للتحقق من الربحية. يمكن أن تكون معدلات الاسترداد من blockchain بطيئة وستزيد من إبطاء العملية إذا كان هناك الكثير من المسارات التي تنتظر التحقق من الربحية. قد ترغب في تضييق قائمة المسارات المثلثة عن طريق حساب الربح والخسارة بناء على الأسعار السطحية التي توفرها نقاط نهاية تسعير GraphQL الخاصة ب DEX إن وجدت (هنا يأتي Uniswap v3’s)، حيث أن واجهات برمجة تطبيقات GraphQL أسرع بكثير من البلوكشين في توفير بيانات الاقتباس. بمجرد تحديد الطرق، قم بتشغيلها مع الاقتباسات المستردة من السلسلة للحصول على حساب أكثر دقة للربح والخسارة.
زيادة استثمارك مع قرض فلاشيمكن توسيع الربح بشكل أكبر - استعارة الرموز بفائدة منخفضة واستثمارها باستراتيجية ربحية ستكون دائمًا فكرة جيدة. نظريًا، طالما أن الربح الإجمالي جيد بما يكفي لتغطية رسوم القرض الفلاش وتبادل العملات، فإن استراتيجية التحكيم الثلاثي ستعتبر مربحة. إحدى الحيل الحرجة لحماية ربحك وتخفيف المخاطر التجارية العامة هو وجود منطق في عقد التداول الخاص بك لفشل عملية القرض الفلاش في حالة فشل فحص الربح الإجمالي، لأنه عندما تفشل العملية، ستعكس جميع العمليات ولن تحتاج إلى تحمل الخسارة وحتى الرسوم للعملية. سيعمل هذا الجانب المنطقي كحارس يعمل على منع الانزلاق أو حركة سعر الصرف التي لا تخدمنا.
ومع ذلك، بغض النظر عن نجاح أو فشل الصفقة، فإن رسوم الغاز شيء لا يمكنك التخلص منه أبدًا وقد يكون السبب الرئيسي في خسارتك من التحكم الثلاثي. قم دائمًا بتقييم رسوم الغاز لصفقة استراتيجيتك وخذ ذلك في حساب الربحية الصافية. يرجى الإشارة إلى حالات الاختبار لتقدير رسوم الغاز في كود المصدر الخاص بي.
يعمل التحكم الثلاثي على أنه استراتيجية في تداول تبادل العملات الرقمية، تستفيد من التغيرات في أسعار الصرف داخل سوق واحد أو عبر أسواق متعددة. تتكون هذه الطريقة من ثلاث صفقات متتالية: تبديل عملة رقمية أولية بعملة ثانية، الثانية بعملة ثالثة، وفي نهاية المطاف، العملة الثالثة بالعملة الأولية، كل ذلك بهدف تحقيق الربح. وبالتالي، يحتوي مصطلح "ثلاثي" على عملية ثلاثية الخطوات.
الصورة التي تم إنشاؤها بواسطة الذكاء الاصطناعي
على DEX، تتسبب الفرص المتاحة للتحكم الثلاثي عادةً في الفروقات في السيولة عبر عدة برك. عادةً ما تكون قصيرة المدى، وتستمر لبضع ثوانٍ أو حتى أقل، حيث يعدل الصرف بسرعة أي تفاوتات في التسعير. وبناءً على ذلك، يتم استخدام خوارزميات التداول التلقائي المزودة بتنفيذ سريع للاستفادة من هذه الفروقات العابرة. ولمساعدتك في فهم المفهوم، ها هو مثال:
الصفقة المثلثة الثلاثية تبدأ من 01 - شراء 1 wBTC بمبلغ 60,000 دولار أمريكي، تليها 02 - شراء 16 WETH بمقابل 1 wBTC وتنتهي بـ 03 - بيع 16 WETH مقابل 66,000 دولار أمريكي. في نهاية الرحلة، سنكون قد حصلنا على 6,000 دولار أمريكي كأرباح.
هناك نوعان من أساليب التبادل المتعددة المتاحة على Uniswap v3: الإدخال الدقيق والإخراج الدقيق. كما يوحي أسماؤهما، النوع الأول يتوقع رمزًا بمبلغ دقيق كإدخال للتبادل، وفي نهاية المطاف، سيتم إخراج رمز بمبلغ محدد بأسعار الصرف؛ يتوقع النوع الثاني مبلغًا محددًا بدقة كإخراج، وفقط الكمية الكافية من الرمز كإدخال يمكن أن تلبي التبادل بأسعار الصرف.
بطبيعة العمل التجاري للتحكم الثلاثي ، نود أن نأخذ رمزًا بكمية دقيقة كإدخال ، ونبدله في عملة رقمية أخرى ، ثم نبدله مرة أخرى إلى الرمز الأصلي للربح ، كما نتمنى.
address constant SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
عنوان ثابت WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
عنوان الثابت USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
contract MultiHopSwap { using SafeERC20 for IERC20;ISwapRouter02 private constant ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 private constant MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;function swapExactInputMultiHop(uint256 amountIn) external { IERC20(USDC).safeApprove(address(ROUTER), MAX_INT); IERC20(WETH).safeApprove(address(ROUTER), MAX_INT); IERC20(DAI).safeApprove(address(ROUTER), MAX_INT); bytes memory path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC) ; ISwapRouter02.ExactInputParams memory params = ISwapRouter02 .ExactInputParams({ path: path, recipient: address(this), amountIn: amountIn, amountOutMinimum: 1 }); ROUTER.exactInput(params); }}
تلعب أجهزة التوجيه دورًا حاسمًا في تسهيل توفير السيولة. نظرًا لأنها لا تحتفظ بالأرصدة المميزات ولا تحافظ على رصيد الرموز، يمكن استبدال أجهزة التوجيه بأمان. لهذا السبب، تحمل أجهزة التوجيه أرقام إصدار، تبدأ من 01. في تنفيذنا، نستخدم Router02 عند 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45على الشبكة الرئيسية.
SafeERC20 هو طبقة وقائية مبنية حول عمليات ERC20 ، مما يضمن تفاعل آمن مع رموز ERC20 داخل عقدنا. على عكس وظائف ERC20 العادية ، يعزز SafeERC20 السلامة عن طريق التحقق من القيم المرجعية البوليانية لعمليات ERC20. إذا فشلت أي عملية ، يتم عكس المعاملة ، مما يقلل من المخاطر. بالإضافة إلى ذلك ، يتكيف SafeERC20 مع رموز ERC20 غير القياسية التي تفتقد القيم المرجعية البوليانية ، مما يوفر المرونة والصلابة في إدارة الرموز. من خلال الموافقة على الحد الأقصى للمبلغ ، نسمح لـ Router02 بنقل الرموز نيابة عنا. دون ذلك ، يمكنك توقع رسالة خطأ STF حيث يعني STF أن التنفيذ يتم عكسه بواسطة تأكيد require في وظيفة TransferHelper.safeTransferFrom.
التالي، سنلقي نظرة على كيفية تحديد مسار مثلثي:
bytes ذاكرة path = abi.encodePacked(USDC، uint24(3000),
WETH، uint24(3000)، DAI، uint24(3000)، USDC) ;
من خلال abi.encodePacked، تقوم Solidity بتعبئة قيم متعددة بشكل محكم دون إضافة أي حشو. إنها ترتبط بيانات البيانات الثنائية الخام لكل معلمة. ليس من الصعب فهم أن المعلمات المتسلسلة تبادلت الرسوم بين أزواج العملات الرقمية. يبدأ المسار من USDC ويتوقف عند USDC متوقعًا ربحًا. ثم يتم لفه بواسطة ExactInputParams مع معلمات إلزامية أخرى وتغذيه في الموجه للتبادل المتعدد القفزات.
نستخدم نفس التقنية عن طريق تشعب الشبكة الرئيسية مع التنكر. بمجرد تحقق أن 10 USDC قد تم تأكيدها بأنها تمت اعتمادها على العقد، يمكن تشغيل تبديلات متعددة القفزات كما هو موضح أدناه:
it("ينفذ تبادلات متعددة القفزات", async () => {balance = await swap.tokenBalance(USDC);console.log(`الرصيد الحالي لـ USDC = ${balance}`);console.log(`جاري تبديل ${initialFundingHuman} USDC`);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(`الرصيد الحالي لـ USDC = ${balance}`);expect(balance).not.equal(0);});
يجب أن يبدو نتيجة الاختبار كما هو موضح أدناه:
الرصيد USDC للحوت: 170961218210457n
بدأ التنكر.
تم الانتهاء من التقمص.
الرصيد الحالي من USDC = 100000000
تبديل 100 USDC
الرصيد الحالي لليو أس دي سي = 91677417
بعد أن قفزنا من خلال الحلقات، خسرنا المال - من الواضح أن المسار بأسعار البقع لم يكن لصالحنا، ولكن تحصل على فكرة عن كيفية يجب أن يتم تنفيذ التحكيم الثلاثي باستخدام تبادلات متعددة على Uniswap v3.
هل لم أقلأقوى مصدر تمويل في نظام ال DeFi هو القرض الفلاشيلن تحتاج إلى الكثير من الإبداع لبناء استراتيجية تداول للتحكم الثلاثي ممولة بقرض فلاش باستخدام كل من قرض فلاش وتبادلات متعددة القفزات التي تعلمت عنها. يمكن شرح منطق مجتمع بواسطة رسم توضيحي تسلسلي محدث كما يلي:
مخطط تسلسلي للمراجحة الثلاثية الممولة من قرض فلاش على Uniswap v3 (تجاهل بعض العمليات للتبسيط)
تحقق من رمزي المصدري لكل من القرض الفلاشي والتبادلات متعددة الوجهات المنفذة على يونيسواب v3 —https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255, قم بتحليل رسم تسلسلي وقم بعمل واجبك الخاص لإنهاء تجميع العقود الذكية.
أول شيء نريد أن ننظر إليه هو المسار الذي يتكون من تسلسل الصفقات الثلاثة: لكي تكون مربحة ، يجب أن تكون 3 أزواج مناسبة من العملات المشفرة بالمعدلات الصحيحة. من أجل العثور على كل هذا الصواب ، تحتاج إلى تطوير برنامج يقوم بتبديل الأزواج القابلة للتداول في نمط المراجحة المثلثية ومحاكاة المقايضات للتحقق من الربحية. يمكن أن تكون معدلات الاسترداد من blockchain بطيئة وستزيد من إبطاء العملية إذا كان هناك الكثير من المسارات التي تنتظر التحقق من الربحية. قد ترغب في تضييق قائمة المسارات المثلثة عن طريق حساب الربح والخسارة بناء على الأسعار السطحية التي توفرها نقاط نهاية تسعير GraphQL الخاصة ب DEX إن وجدت (هنا يأتي Uniswap v3’s)، حيث أن واجهات برمجة تطبيقات GraphQL أسرع بكثير من البلوكشين في توفير بيانات الاقتباس. بمجرد تحديد الطرق، قم بتشغيلها مع الاقتباسات المستردة من السلسلة للحصول على حساب أكثر دقة للربح والخسارة.
زيادة استثمارك مع قرض فلاشيمكن توسيع الربح بشكل أكبر - استعارة الرموز بفائدة منخفضة واستثمارها باستراتيجية ربحية ستكون دائمًا فكرة جيدة. نظريًا، طالما أن الربح الإجمالي جيد بما يكفي لتغطية رسوم القرض الفلاش وتبادل العملات، فإن استراتيجية التحكيم الثلاثي ستعتبر مربحة. إحدى الحيل الحرجة لحماية ربحك وتخفيف المخاطر التجارية العامة هو وجود منطق في عقد التداول الخاص بك لفشل عملية القرض الفلاش في حالة فشل فحص الربح الإجمالي، لأنه عندما تفشل العملية، ستعكس جميع العمليات ولن تحتاج إلى تحمل الخسارة وحتى الرسوم للعملية. سيعمل هذا الجانب المنطقي كحارس يعمل على منع الانزلاق أو حركة سعر الصرف التي لا تخدمنا.
ومع ذلك، بغض النظر عن نجاح أو فشل الصفقة، فإن رسوم الغاز شيء لا يمكنك التخلص منه أبدًا وقد يكون السبب الرئيسي في خسارتك من التحكم الثلاثي. قم دائمًا بتقييم رسوم الغاز لصفقة استراتيجيتك وخذ ذلك في حساب الربحية الصافية. يرجى الإشارة إلى حالات الاختبار لتقدير رسوم الغاز في كود المصدر الخاص بي.