أنا أحب PHP لسرعته في التنمية وسهولة الحمل. هذا جيد جدًا عندما تكون هناك دائمًا أداة جاهزة لحل المشكلات في جيبك.
كان الأمر مخيباً للآمال إلى حدٍ ما ، عند لقائه مع برنامج Waves Platform blockchain المحلي ، لم يكن هناك PHP SDK جاهز في ترسانته. حسنًا ، كان علي أن أكتبها.
في البداية ، كان علي استخدام العقد لتوقيع المعاملات. لذلك ، لإدارة ثلاثة عناوين ، كان لا بد من إطلاق العقد الثلاثة ... كان مشهداً بائسة ، على الرغم من أنه حل بعض المشاكل. حتى يتم التوصل إلى فهم أن الاعتماد على العقد هو طريق مسدود. أولاً ، بسبب محدودية وظائف API ، وثانياً ، بسبب السرعة (في تلك الأيام ، كانت العقد بطيئة للغاية).
لقد بدأت عملين متوازيين. واحد هو جعل متصفح blockchain التي ستكون سريعة ومستقلة تماما من العقد API. والثاني هو جمع كل الوظائف للعمل مع Waves Platform في مكان واحد. لذلك كانت هناك مشاريع w8io و WavesKit .
كانت الخطوة الأولى وراء الكواليس من blockchain Waves متصفح w8io . لم يكن الأمر سهلاً ، لكن كان لا يزال من الممكن كتابة حساب مستقل لجميع الأرصدة وحتى العثور على خطأ في العمليات الحسابية على العقد الأصلية ( برنامج مكافآت الأخطاء ، بالمناسبة ، يعمل من أجلهم ، يدفعون مقابل الأخطاء التي تم العثور عليها). يمكنك معرفة المزيد حول وظيفة مستعرض w8io في هذا الموضوع: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite
في عملية العمل على w8io ، كانت لدي شكوك بالفعل ، ولكن عندما انتهى العمل إلى حد منطقي وبدأت في إنشاء SDK ، تم تأكيد الشكوك. لم أتمكن من العثور على بعض الوظائف في أي مكان ، بما في ذلك التشفير الأكثر أهمية. ثم بدأت من خلال إنشاء الطوب الخاص للمؤسسة. لقد ولدوا: ABCode للترميز في base58 (في الواقع لترميز أي حروف أبجدية في أي) ، Curve25519 لإنشاء وفحص التوقيعات المتوافقة (مع خيارات على المنشطات ) ، Blake2b لحساب واحد من التجزئة (والذي كان متاحًا فقط بدءًا من PHP 7.2) إلخ
هنا يجب أن أشكر إينال كاردانوف على بعض النصائح القيمة التي وجهتني نحو الملحن بدلاً من الملفات المعتادة ، ولكنها قديمة.
بعد بضعة أشهر ، شاهدت WavesKit الضوء وتركت النسخة التجريبية وأصبحت الآن جاهزة للعمل مع جميع وظائف Waves القياسية. يمكن إنشاء جميع المعاملات المتوفرة على الشبكة الرئيسية بسهولة وتوقيعها وإرسالها باستخدام حزمة واحدة فقط تعمل على جميع إصدارات 64 بت من PHP بدءًا من 5.6 شاملة.
نربط WavesKit بمشروعنا:
composer require deemru/waveskit
نستخدم:
use deemru\WavesKit; $wk = new WavesKit( 'T' ); $wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' ); $tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) ); $tx = $wk->ensure( $tx );
في المثال أعلاه ، نقوم بإنشاء كائن WavesKit الذي يعمل على شبكة الاختبار "T". قم بتعيين العبارة الأولية التي يتم من خلالها حساب المفاتيح وعنوان الحساب تلقائيًا استنادًا إلى المفتاح العمومي. بعد ذلك ، نقوم بإنشاء معاملة تحويل قدرها 0.00000001 من موجات العنوان المحسوبة تلقائيًا بواسطة seed إلى عنوان الاسم المستعار "test" ، وننقلها إلى التوقيع باستخدام مفتاح خاص وإرسالها إلى الشبكة. بعد ذلك ، نتحقق من أن الشبكة قد تم تأكيدها بنجاح.
يتركز العمل مع المعاملات في الوظائف التي تبدأ بـ tx . لفهم أفضل للعمل مع المعاملات ، يمكنك دراسة وثائق WavesKit أو الانتقال الفوري إلى أمثلة مرئية في اختبارات التكامل المستمر .
منذ تطورت WavesKit في ظل ظروف العالم الحقيقي ، لديها بالفعل ميزات متقدمة. الميزة القاتلة الأولى هي وظيفة ضمان ، والتي تتحكم في تحقيق المستوى المطلوب من الثقة بأن الصفقة لم تضيع ، بل تم تأكيدها ووصلت إلى العدد المطلوب من التأكيدات على الشبكة.
آلية أخرى مضادة للرصاص هي كيفية تواصل WavesKit مع العقد. في ظروف الاحتباس الحراري ، يعمل الإطار فقط مع العقدة الرئيسية ، مع الحفاظ على اتصال مستمر معها ، ولكن في حالة وجود أخطاء ، يمكن التبديل تلقائيًا إلى العقد الاحتياطية. إذا قمت بتثبيت مجموعة من عقد النسخ الاحتياطي ، فيمكنك الاتصال بوظيفة setBestNode لتحديد أفضل عقدة باعتبارها العقدة الرئيسية من خلال القيمة القصوى للارتفاع الحالي وسرعة الاستجابة. أضف الآن إلى هذا ذاكرة التخزين المؤقت للاستعلام الداخلي وشعر برعاية كل من المستخدمين وأصحاب العقدة.
واحدة من أحدث الآليات المتقدمة هي وظيفة txMonitor . ظهرت فيما يتعلق بضرورة الاستجابة للمعاملات الواردة في الوقت الحقيقي. هذه الوظيفة تحل تماما جميع الفروق الدقيقة المرتبطة بمعالجة المعاملات في blockchain. لا مزيد من الألم ، فقط قم بتثبيت وظيفة رد الاتصال الخاصة بك مع الخيارات المطلوبة وانتظر المعاملات الجديدة التي ستبدأ عملياتك. على سبيل المثال ، تم تصميم مشروع VECRO الآخر الخاص بي بالكامل حول هذه الوظيفة ، ويمكنك بسهولة معرفة كيفية عمله مباشرةً في رمز المشروع .
أحب المصادر المفتوحة ، هذا هو أحد أعظم إنجازات البشرية. بما أنني المطور الوحيد وقد وصلت إلى الحد الذي تم فيه حل جميع احتياجاتي ، فأنا أدعوك لاستخدام WavesKit والمساهمة فيه .