دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

نَشّر وسَيّر عقود Solidity من التيرمينال ديالك باستعمال Arbitrage Contract Deployer

تعلّم كيفاش تنصّب وتكوّن Arbitrage Contract Deployer، تكمپايل ملفات Solidity، تنشّر العقود فـ Ethereum Mainnet، تعيّط على دوال القراية والكتابة، تراجع مصاريف الغاز، تسيّر النشرات المحفوظة، وتشغّل تدفق الميمپول.

نَشّر وسَيّر عقود Solidity من التيرمينال ديالك باستعمال Arbitrage Contract Deployer

شنو غادي تتعلّم

Arbitrage Contract Deployer هو toolkit ديال سطر الأوامر مبني بـ Node.js، كيسمح بترجمة وتجهيز ونشر والتفاعل مع عقود Solidity مباشرة من التيرمينال. هاد الدليل كيشرح كيفاش تثبّتو، تربط محفظة بـ Ethereum Mainnet، تنشر عقد، تستعمل المينيو التفاعلي، وتراقب نشاط mempool المدعوم.

مهم: هاد المشروع كيخدم غير مع Ethereum Mainnet. المعاملات كتستعمل ETH حقيقي وقد تكلّف فلوس حقيقية. راجع كل عقد، عنوان، ومعاملة قبل ما تأكّدها.

الخصائص الرئيسية

  • كيكمبايل عقود Solidity عند الطلب باستعمال solc، بلا Remix ولا Hardhat.
  • كيحلّ imports من الملفات المحلية، node_modules، GitHub، وCDN متوافق مع npm.
  • كينشر العقود فـ Ethereum Mainnet عبر اتصال RPC.
  • كيخزّن العناوين المنشورة، ABIs، والتواريخ فـ deployments.json.
  • كيوفّر واجهة بمفاتيح الأسهم لنشر العقود ونداء الدوال.
  • كيصنّف دوال العقود لعمليات للقراءة فقط، أو الكتابة، أو قابلة للدفع.
  • كيعرض مسبقاً تقديرات الغاز، الرسوم، والتكلفة التقريبية بـ ETH وUSD.
  • كيستعمل oracle ديال Chainlink باش يجيب سعر ETH/USD لتقدير الرسوم.
  • يقدر يشغّل process مستقل لبثّ mempool مع عرض منسّق للمعاملات.

المتطلبات المسبقة

خاصك Node.js 18 ولا أحدث حيث المشروع كيحتاج للوظيفة المدمجة fetch. الـ README كيذكر حتى npm 9 ولا أحدث. غادي تحتاج endpoint ديال RPC لـ Ethereum Mainnet، والمفتاح الخاص ديال محفظة، وكمية كافية من ETH باش تخلّص أي معاملة نشر أو كتابة كتأكّدها.

ثبّت المشروع

1. نسخ المستودع

نسخ المشروع ودخل للمجلد ديالو. بدّل مسار المستودع بمكان المستودع اللي كتستعمل.

git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>

تقدر حتى تحمّل المستودع كأرشيف ZIP وتفكّ الضغط عليه فمجلد محلي.

2. تثبيت الاعتماديات

ثبّت الحزم المصرّح بها فـ package.json:

npm install

هاد الأمر كيثبّت جوج ديال الاعتماديات الرئيسية:

  • ethers للمزوّدين، المحافظ، التعامل مع ABI، والمعاملات.
  • solc لكمبايلة Solidity من Node.js.

من بعد التثبيت، خاص المشروع يكون فيه مجلد node_modules. إلا ما كانش، راجع الخرج ديال npm install وحلّ مشكل التثبيت قبل ما تكمل.

إعداد المحفظة واتصال RPC

صايب ملف سميتو .env فالجذر ديال المشروع. زِد فيه المفتاح الخاص ديالك ورابط RPC ديال Ethereum Mainnet:

PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.com

الـ README كيذكر هاد endpoints التجريبية ديال RPC:

  • https://ethereum-rpc.publicnode.com
  • https://eth.llamarpc.com
  • https://cloudflare-eth.com
  • https://mainnet.infura.io/v3/<KEY>
  • https://eth-mainnet.g.alchemy.com/v2/<KEY>

خلي .env خاص، وتأكد بلي داخل فـ .gitignore. الملف فيه بيانات الدخول اللي ما خاصهاش عمرها تترفع لمستودع عمومي.

شغّل أداة النشر التفاعلية

شغّل الواجهة الرئيسية بهاد الأمر:

node start

إلا كان المشروع معرّف script ديال npm باسم start، تقدر بدلاً من ذلك تشغّل:

npm start

التطبيق كيتحقق من الشبكة، المحفظة، والرصيد، ومن بعد كيفتح المينيو التفاعلي ديالو. مينيو نموذجي يقدر يتضمن اختيارات بحال:

=== Ethereum Contract Deployer ===

i Network: mainnet (chainId 1)
i Wallet:  0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!

Main menu
> Deploy Arbitrage.sol
  Open deployed Arbitrage (0x2d7A..., 2025-01-15)
  Exit

استعمل مفاتيح الأسهم باش تختار عنصر، ضغط على Enter باش تأكّد الاختيار، واستعمل أزرار OK ولا Cancel اللي كيبانو ملي البرنامج كيطلب الموافقة على المعاملة. ضغط على Ctrl+C باش تخرج.

كمبايل ونشر عقد Solidity

1. زِد ولا اختار ملف Solidity

حط ملف Solidity فمجلد المشروع، ولا اختار ملف .sol موجود من خلال مينيو النشر. الكمبايلر كيبني العقد اعتماداً على اسم الملف وكيحلّ الـ imports المدعومة أوتوماتيكياً.

2. راجع تفاصيل الكمبايلة والنشر

اختار Deploy <file>.sol من المينيو الرئيسية. التطبيق كيكمبايل العقد، كيحضّر معاملة النشر، وكيعرض مسبقاً متطلبات الغاز قبل ما يطلب التأكيد.

3. أكّد المعاملة

راجع تقدير الغاز، الرسوم الحالية، الحد الأقصى للرسوم، رصيد المحفظة، وتفاصيل العقد. أكّد غير ملي تكون القيم والشبكة المستهدفة صحيحة. من بعد ما كتتعدّن المعاملة، الأداة كتعرض العنوان المنشور ورابط Etherscan.

معلومات النشر كتتحفظ محلياً فـ deployments.json. هاد الشي كيخليك تعاود تفتح عقد منشور من بعد بلا ما تدخل العنوان وABI من جديد.

فهم معاينة الغاز

قبل النشر وعمليات الكتابة المدعومة، الأداة كتعرض معاينة ديال الغاز. الحساب ديالها كيتبع العملية الموثقة فالـ README:

  1. estimateGas كيعطي تقديراً لمتطلبات الغاز.
  2. حدّ الغاز كيتحسب بإضافة هامش 10 فالمائة للتقدير.
  3. الحد الأقصى للرسوم لكل غاز كيتحسب بجوج مرات الرسوم الأساسية زائد رسوم الأولوية.
  4. الواجهة كتعرض رسوم البلوك الحالي المتوقعة والحد الأقصى الممكن للرسوم.
  5. كيتم استعمال سعر Chainlink ديال ETH/USD لتقدير الرسوم بالدولار.

المعاينة تقدر تتضمّن قيم بحال وحدات الغاز المقدّرة، حدّ الغاز، الرسم الأساسي، الرسم ذي الأولوية، أقصى رسم لكل غاز، تكلفة ETH المتوقعة، أقصى تكلفة ETH، ورصيد المحفظة. اعتابر أقصى رسم تقديرًا علويًا، وتأكد باللي الرصيد ديالك يقدر يغطّي المعاملة.

حلّ نشر محفوظ وعيّط على الدوال

اختار Open deployed <name> باش تخدم مع عقد كان محفوظ من قبل فـ deployments.json. الواجهة كتوسم الدوال المتاحة حسب السلوك ديالها:

  • [read] كتعني دوال view وpure اللي ما كتصيفطش معاملات.
  • [write] كتعني الدوال اللي كتبدّل الحالة وكتحتاج معاملة.
  • [payable] كتعني الدوال اللي تقدر تقبل ETH.
  • [info] Contract balance كتعرض رصيد العقد.
  • <- Back to main menu كترجّع للقائمة الرئيسية.

الاستدعاءات اللي غير للقراءة تقدر تستعملها باش تفحص حالة العقد. استدعاءات الكتابة والدوال القابلة للدفع كدوز من معاينة الغاز وكتحتاج التأكيد قبل ما تتصيفط المعاملة. الواجهة كتوفّر حتى إجراء OK باش تقدر تلغي بلا ما ترسل العملية.

شغّل تدفّق الميمبول

تدفّق الميمبول كيخدم كعملية مستقلة. شغّلو يدويًا بهاد الأمر:

node mempool.js

التدفّق كينسّق النشاط اللي تكتاشف، مع تفاصيل بحال الشاري، الموجّه، مبلغ ETH، التوكن، الطريقة، معرّف المعاملة، ومخرجات الحالة النهائية. ملف README كيبين حتى عروض الصفقة والربح بالنسبة لسير العمل اللي كيدعمو التدفق.

مصدر التوكنات هو erc20.json، وكيّتبع صيغة Uniswap Token List Schema من Sequence Token Directory. المحمّل كيدعم يا إما لائحة توكنات مباشرة أو كائن فيه لائحة tokens. كيفلتر العناوين غير الصالحة والعناوين الصفرية، وكيحتافظ بالتوكنات اللي عندها chainId مساوي لـ 1، وكيستخرج عنوان كل توكن والرمز والاسم ديالو.

إلا ما كانش erc20.json موجود، التدفق كيرجع لعناوين عشوائية وكيعرض تحذير. وقف التدفق بـ Ctrl+C، ولا استعمل خيار الإيقاف ملي يبان فـ الواجهة التفاعلية.

استعمل استيرادات Solidity

المترجم المدمج كيدعم بزاف ديال أساليب الاستيراد:

  • روابط GitHub، بحال import "https://github.com/Uniswap/v3-core/...";
  • استيرادات CDN بصيغة npm، بحال import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  • الحزم المتوفرة فـ node_modules المحلي.
  • الاستيرادات المحلية النسبية، بحال import "./MyLib.sol";

روابط GitHub اللي كتستعمل الصيغة github.com/owner/repo/blob/branch/path كيتحوّلو أوتوماتيكيًا للصيغة المكافئة ديال raw.githubusercontent.com.

بنية المشروع

الملفات والمجلدات الرئيسية عندها هاد الأدوار:

  • start.js هو نقطة الدخول ديال node start.
  • deploy.js فيه منطق النشر والقائمة التفاعلية.
  • mempool.js كيشغّل تدفّق الميمبول المستقل.
  • erc20.json فيه لائحة التوكنات اللي كيستعملها التدفق.
  • deployments.json كيخزّن بيانات النشر المحفوظة وكيتخلق أوتوماتيكيًا.
  • lib/ui.js كيسير الألوان والقوائم والمربعات والتسجيل.
  • lib/env.js كيتكلف بمتغيرات البيئة وبيانات النشر وروابط المستكشف.
  • lib/compile.js كيتكلف بالترجمة وحلّ الاستيرادات.
  • lib/chain.js كيتكلف بالغاز والإيصالات وتسعير ETH.
  • lib/contract.js كيتكلف بالنشر واستدعاءات الدوال وتشغيل التدفق.

نصائح متقدمة وفحوصات تشغيلية

  • تأكد باللي نقطة RPC ديالك خاصة بـ Ethereum Mainnet. التطبيق كيتسنى معرّف السلسلة 1 وكيرفض الشبكات الأخرى.
  • فحص رصيد المحفظة قبل ما تأكد النشر ولا عملية كتابة.
  • استعمل deployments.json كبيانات نشر محلية، وتفادى تسجيل معلومات حساسة ولا معلومات اختبار غير مقصودة فالمستودع.
  • راجع كود العقد، والتبعيات المستوردة، وعناوين الوجهة، والقيم القابلة للدفع قبل إرسال المعاملات.
  • فحص نسخة مترجم Solidity المثبتة بهاد الأمر node -e "console.log(require('solc').version())".
  • تأكد باللي التبعيات موجودة بهاد الأمر ls node_modules | head.
  • خد بعين الاعتبار أن المشروع، حسب خارطة الطريق الحالية ديالو، ما كيوفّرش دعم multisig، ولا تصدير ABI لأنواع TypeScript، ولا محاكاة معاملات Tenderly.

لائحة فحص الأمان

  1. ما تنشرش ولا تسجّل PRIVATE_KEY.
  2. خلي .env فـ .gitignore.
  3. استعمل محفظة فيها غير الأموال المطلوبة للعملية.
  4. قرا كل معاينة ديال الغاز قبل ما تختار OK.
  5. تأكد باللي الواجهة كتشير لـ Ethereum Mainnet ومعرّف السلسلة 1.
  6. فحص العقود والعناوين مزيان قبل استعمال دوال الكتابة ولا الدوال القابلة للدفع.

أوامر مفيدة

npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | head

الخلاصة

Arbitrage Contract Deployer كيوفّر سير عمل من خلال الطرفية لترجمة Solidity، ونشر العقود على Ethereum Mainnet، وإعادة فتح عمليات النشر المحفوظة، واستدعاء دوال العقود، ومراجعة تكاليف المعاملات. من بعد ما تهيّأ Node.js والتبعيات وملف .env آمن، القائمة التفاعلية كترشدك فالنشر وعمليات العقود، وكتعرض تقديرات الغاز وETH/USD. حيث جميع معاملات Mainnet كتستعمل أموال حقيقية، خدم بحذر وما تأكد حتى معاملة إلا من بعد ما تراجع تفاصيلها.

المشروع منشور برخصة MIT. خاص المساهمات تخلي بيانات الدخول برا من الـ commits، وتتأكد بلي deployments.json فيها غير البيانات المحلية المناسبة.