عند تشغيل مشروع تجاري – سواء كان متجرًا إلكترونيًا أو ورشةً محلية – يظل سؤال توزيع الأرباح بين الشركاء أو الموظفين حساسًا. الاعتماد على حسابات يدوية أو وعود شفهية يخلق فرصًا لسوء الفهم أو الخلاف. هنا يأتي دور العقود الذكية: شفرة تُنفّذ نفسها عندما تتحقق شروط محددة، وتضمن أن كل مستحق يحصل على حصته دون تأخير.
ما هو العقد الذكي؟
العقد الذكي هو برنامج صغير يُخزن على شبكة إيثيريوم. يحدّد في كوده من هو المستفيد، ما هي النسبة المئوية التي يحصل عليها، ومتى يتم الدفع – عادةً بعد إغلاق دورة مالية أو تحقيق إيراد معين. بمجرد نشر العقد، لا يمكن تعديله، ما يعني أن جميع الأطراف تحصل على صفة الثقة التي لا توفرها العقود التقليدية.
الخطوة الأولى: تحديد الشروط بدقة
قبل كتابة أي سطر كود، اجلس مع جميع الأطراف ودوّن ما تريد أن يحقق العقد. مثال عملي لمطعم صغير:
- النسبة المئوية لكل شريك (40% للمالك، 30% للمستثمر، 30% للمدير).
- توزيع الأرباح كل شهر بعد خصم المصاريف الثابتة.
- العملة المستخدمة: إيث (ETH) أو عملة مستقرة مثل USDC لتقليل التقلبات.
كلما كان الوصف واضحًا، كلما كان تنفيذ العقد أسهل.
الخطوة الثانية: اختيار الأدوات المناسبة
لا تحتاج لتكون مبرمجًا محترفًا لتطبيق عقد بسيط. منصة Remix IDE المتاحة عبر المتصفح تسمح بكتابة كود Solidity (لغة إيثيريوم) وتشغيله على شبكة اختبار (testnet) مثل Sepolia.
إليك ما ستحتاجه:
- محفظة MetaMask متصلة بـ Sepolia.
- قليل من إيث على شبكة الاختبار (يمكن الحصول عليه من صنبور الفوس).
- متصفح يدعم MetaMask.
الخطوة الثالثة: كتابة الكود
الكود التالي يوضح كيفية توزيع الأرباح وفق النسب التي حددناها. احفظه بامتداد .sol في Remix.
pragma solidity ^0.8.20;
contract ProfitSplitter {
address public owner;
address payable public investor;
address payable public manager;
uint256 public ownerShare = 40;
uint256 public investorShare = 30;
uint256 public managerShare = 30;
constructor(address payable _investor, address payable _manager) {
owner = msg.sender;
investor = _investor;
manager = _manager;
}
// صرف الأرباح المتراكمة إلى المشاركين
function distribute() external {
uint256 balance = address(this).balance;
require(balance > 0, "No funds to distribute");
uint256 shareOwner = (balance * ownerShare) / 100;
uint256 shareInvestor = (balance * investorShare) / 100;
uint256 shareManager = balance - shareOwner - shareInvestor; // لتجنب تقريبات غير دقيقة
payable(owner).transfer(shareOwner);
investor.transfer(shareInvestor);
manager.transfer(shareManager);
}
// استلام الأموال (مثلاً إيرادات الشهر)
receive() external payable {}
}
النقاط الأساسية في الكود:
- المتغيّرات
ownerShare،investorShareوmanagerShareتحدد النسب. - دالة
distributeتُنفّذ الدفع تلقائيًا عندما يدعو أحد الشركاء لها. - دالة
receiveتسمح للعقد باستقبال إيث مباشرةً.
الخطوة الرابعة: اختبار العقد على شبكة الاختبار
بعد كتابة الكود، اضغط على زر “Compile” ثم انتقل إلى تبويب “Deploy & Run Transactions”. حدد شبكة Sepolia، أدخل عناوين المستثمر والمدير، ثم اضغط “Deploy”.
ستظهر لك معاملة نشر العقد في MetaMask. بعد تأكيدها، ستحصل على عنوان العقد. الآن يمكنك تجربة إيداع بعض الإيث عبر النقر على زر “payable” وإدخال مبلغ (مثلاً 0.1 ETH).
بعد الإيداع، استدعِ الدالة distribute. إذا سارت الأمور كما هو متوقع، سيُخصم المبلغ من العقد ويُحوَّل إلى العناوين المحددة.
الخطوة الخامسة: الانتقال إلى الشبكة الرئيسية
عند التأكد من أن كل شيء يعمل على Sepolia، حان الوقت للنشر على شبكة إيثيريوم الرئيسية. الخطوات نفسها، الفرق في أن تكلفة النشر (الغاز) أعلى؛ لذا احرص على حساب ميزانية النشر ضمن مصاريف المشروع.
تأكد من أن جميع الشركاء يملكون محفظة تدعم إيث أو USDC، لأن أي فرق في دعم العملة سيؤثر على عملية السحب.
نصائح عملية لتفادي المشكلات الشائعة
- تجنب القيم العائمة: استخدم أرقامًا صحيحة لتحديد النسب (مثلاً 40 بدلًا من 0.4) لتقليل الأخطاء الحسابية.
- تحقق من رصيد العقد قبل الصرف: الدالة
distributeتحتوي على شرط يمنع الصرف إذا لم يكن هناك رصيد. - إضافة حد زمني (optional): إذا رغبت في توزيع الأرباح شهريًا فقط، يمكنك إضافة متغيّر
lastDistributionوالتحقق من مرور 30 يومًا. - احفظ نسخة من الكود على GitHub: يساعدك ذلك على استرجاعه في حال فقدته أو احتجت لتدقيقه لاحقًا.
الختام: لماذا يستحق الجهد?
باستخدام عقد ذكي، تحصل على شفافية لا مثيل لها. كل شريك يستطيع مراجعة المتاح على السلسلة العامة، ولا توجد فرصة لتغيير النسب أو تأخير الدفع. بالإضافة إلى ذلك، تُقَلِّل الوقت المستغرق في إعداد تقارير مالية شهرية، لأن العقد يقوم بالعملية تلقائيًا.
المستقبل القريب قد يجلب أدوات عربية تدعم إنشاء العقود دون كتابة كود، لكن معرفة الأساسيات يبقى مفيدًا لأي صاحب مشروع يرغب في تبني التقنية بثقة.

