مقدمة
نعم ، أنت فقط تفكر في الأمر ، وهي عملة مشفرة مركزية في PHP ، هذا ليس صحيحًا. لكن القيود التي فرضتها على الأفكار شقت طريقها ، لذلك ، كما كنت قد خمنت ، قررت أن أكتب عنها. في الجزء الأول ، سنخبرك ما هي العملة المشفرة ، ومناقشة الملاحظات الأولية ، وإنشاء نظام محفظة. الآن ، لنبدأ.
Cryptocurrency ، ما هو الشكل؟
المعلومات المأخوذة من ويكيبيديا
Cryptocurrency هو نوع من العملات الرقمية ، حيث يتم ضمان محاسبة وحدات التسوية الداخلية من خلال نظام دفع غير مركزي (لا يوجد مسؤول داخلي أو خارجي أو أي مثيل لها) ، ويعمل في وضع تلقائي بالكامل.
لا تحتوي العملة المشفرة نفسها على أي مادة أو نموذج إلكتروني خاص - إنه مجرد رقم يدل على مقدار بيانات وحدات التسوية ، وهو مكتوب في الموضع المقابل لحزمة المعلومات الخاصة ببروتوكول نقل البيانات وغالبًا ما لا يتم تشفيره ، مثل جميع المعلومات الأخرى حول المعاملات بين عناوين النظام.
باختصار ، تعمل cryptocurrency مثل هذا:
- مستخدم شبكة ، لديه رصيد ، يرسل معاملة إلى مستخدم مجهول آخر.
- تدخل الصفقة الشبكة.
- يعمل عمال المناجم (أو المستخدمون الذين يقومون بإنشاء الكتل) على حل مشكلة تم إنشاؤها بواسطة خوارزمية خاصة ذات شروط (على سبيل المثال ، لوجود الأصفار 10-30 السابقة في التجزئة ، أو العكس).
- عندما يتم استيفاء شرط (أو شروط) في علامة تجزئة ، بفضل ذلك ، يرسل عامل المناجم رسالة إلى الشبكة يبلغ فيها عن إنشاء كتلة جديدة والمعاملة.
- يتلقى المتلقي الأموال ، ويتلقى عامل المناجم مبلغ المكافأة ، في شكل عمولة تحسب أثناء إعداد المهمة.
هل يعقل أن تكتب عملة تشفير مركزية ، وكذلك في PHP؟
لا أعتقد ذلك. لكن حاول مرة أخرى كما ينبغي.
نحن نعتبر الملاحظات قبل التطوير
سوف نستخدم نظام تحقق تجزئة مزدوج باستخدام إثبات العمل. من المنطقي التحقق من التجزئة على مستوى البرنامج والشبكة. هذا يرجع إلى عملية تحسين الحمل على الخادم. لأنه عندما نذهب إلى الخادم للتحقق من التجزئة عدة مرات ، سوف يظهر مثل هذا الحمل. لذلك ، أقترح القيام بالطريقة التالية:
- على أحد عمال المناجم ، تحقق محليًا من علامة التجزئة للوفاء بالشروط.
- عندما تتطابق الشروط الموجودة في عامل مناجم البرنامج مع الشروط اللازمة ، فإننا نقوم بإجراء فحص على مستوى شبكة التطبيق (على مستوى الخادم).
هذا ، في رأيي ، هو أفضل وسيلة لتوزيع الحمل. من السهل التحقق عدة مرات محليا على جهاز الكمبيوتر من فحص البريد المزعج على الخادم عدة مرات.
الاسم - توصلت إلى اسم بسيط ، وربما لا تنسى - FlyCoin مع رمز العملة FLC المكون من ثلاثة أرقام.
قاعدة البيانات - سأستخدم خيار بسيط ومناسب ، شركة تنمية نفط عمان.
سيتم إنشاء محافظ التشفير - باستخدام المعرف الفريد العمومي (GUID) و mt_rand ، وسيتم استخدام وقت POSIX كبذرة.
هل أنت كسول جدا أن يكون لديك وظيفة التحقق من التجزئة؟ - نعم ، لذلك قررت أن تأخذ الرمز من عامل منجم قديم (مفتوح المصدر) لمثل هذه العملة المشفرة (المتوفاة بالفعل) Entropy ، يا صديقي ، نيكيتا.
لا أصدق أنه قام بإنشاء عملة تشفير واحدة فقط. هل هناك شيء آخر؟بشكل عام ، كل إبداعاته (التي أحيانًا أستخدمها حتى) ، يمكنك أن تجدها في مجموعته في
فكونتاكتي . آمل أن تأتي في متناول اليدين جدا.
دعنا نذهب!
لنبدأ بجعل إطار نظامنا في المستقبل. لنبدأ بتطوير واجهة برمجة التطبيقات للتطبيق لعملتنا المشفرة. والإطار يبدو فارغاً حتى الآن.
<?php function checkHash ($hash, $exp) // $hash - , $exp - . Entropy Miner, . { $sum = 0;
ومن هنا ، إطار معجزة لدينا. بادئ ذي بدء ، ننفذ تسجيل وإنشاء GUIDs لمحافظنا. لقد قمت فورًا بإنشاء تعريف وظيفة API فارغة ، كما عثرت على وظيفة إنشاء GUID في Google. لا تنسى البذور. لقد وجدت وظيفة للحصول على البذور ، وللحصول على GUID فريدة من نوعها.
function make_seed () // PHP { list ($usec, $sec) = explode (' ', microtime ()); return $sec + $usec * 1000000; } mt_srand (make_seed ());
غرامة. وتبدو وظيفة إنشاء المعرِّف الفريد العمومي (GUID) للمحفظة وفقًا لذلك (وكذلك كعب الروتين نفسه):
public function register () // { } protected function genGUID4 () // Google { return sprintf ('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0x0fff) | 0x4000, mt_rand (0, 0x3fff) | 0x8000, mt_rand (0, 0xffff), mt_rand (0, 0xffff), mt_rand (0, 0xffff));
نظرًا لأننا نفعل كل شيء بشكل مجهول ، فلن نقوم بتخزين عنوان IP أو البريد الإلكتروني. لا تأكيد. سنكون كافيين. في ~ 25 دقيقة كتبت وظيفة تسجيل. كلمة مرور واحدة فقط مطلوبة منا. وظيفة API ستعيد المحفظة إلينا.
public function register ($password) // $password - { if ($this->db)
هنا وصفت باختصار ما يفعله هذا الخط أو ذاك.
رسالة عادلة للناس العادلة والمبرمجين.إذا تركت جهات الاتصال الخاصة بك على الموقع (والتي ، ربما ، ستكون هذه العملة المشفرة موجودة) ، ويكتبون لك شيئًا كهذا:
"مرحبا ، هل يمكنك المساعدة؟" لقد احتفظت بلعبة المفاتيح الخاصة بك ، وفجأة فقدت كلمة مروري ، الرجاء المساعدة وستكون جيدًا "- لا تتردد في رفض هذا العرض. جوهر cryptocurrency هو تخزين الأرقام المحفورة في أمان. لا أحد يستطيع إثبات أنه يمتلك حسابًا. وبالتالي ، يمكن لأي مهاجم سرقة أموال الآخرين حتى بدون مشاركة الضحية! لا يهم ، على الرغم من أن هذا الشخص هو صاحب الحساب ، فمن الأفضل رفضه. إذا فقدت أموالك ، فهذا يعني أنك لم تخزن البيانات بشكل صحيح من الحساب. لمزيد من الأمان ، لن ننفذ استعادة كلمة المرور.
يمكن تمثيل دالة التجزئة المعروضة هنا على النحو التالي:

وظيفة تعمل مثل هذا:
كلمة المرور هي المدخلات ، ونحن نتحقق مما إذا كانت قاعدة البيانات متصلة:
نعم ، متصل. (دعونا نجعل كلمة المرور 12345)ننشئ عنوان المحفظة ، ونكتب $ walletId - نحصل على شيء مثل هذا: FLC @ c1cbe61d-a19d-4c82-ba17-3a577df0aeb5 (تم إنشاء هذا المعرف الفريد العمومي (GUID) بواسطة موقع آخر ، ثم أضفت البادئة FLC @ إليه).
نحسب تجزئة النص العادي. في المجموعة الأولى، نحصل على ما يلي: 0087196442FLC @ c1cbe61d-a19d-4c82 -ba17-3a577df0aeb59ee77779db5a44ef3f60044fcb0e1170218e642cb9adc0789ddd08871ad95c7e1d3b1391c6c79774d319b5141bd3b13b717c3d389206ede659cb280949feac66 ( العديد من الرسائل، لا يفاجأ).
في الدور الثاني ، ستصبح التجزئة HMAC مائة بالمائة: 5e43cbb404c81efeb35162e5bba0766f20b340fbabcc66fd5f7a6a1993a8ccd43fc6384ac53f939acca4378681e2bb17912eacf4c65aa6 مرة أخرى.
نكتب كل شيء في قاعدة البيانات.
استجابة لذلك ، نكتب رقم المحفظة التي يمكنك من خلالها تسجيل الدخول.
لا ، غير متصل.في هذه الحالة ، لا يتعين عليك توقع أي شيء يستحق ذلك ، فأرجع FALSE.
هكذا يبدو نظام التسجيل المتطور. في الواقع ، يبدو بسيطا جدا. وفيما يتعلق بالكود - أكثر تعقيدا بكثير.
سوف ننفق المزيد من الوقت وننفذ إذن. مع إذن ، الوضع أبسط. نحن نبحث عن حساب ، ونحاول تسجيل الدخول ، ونعرف خوارزميات جيل تجزئة كلمة المرور المألوفة. بعد ذلك نتحقق ، وإذا كانت البيانات صحيحة ، فنحن نوفر للعميل خطًا هامًا يتم تخزين البيانات من أجل الاتصال به بين الخادم وشركة التعدين.
من نفسييبدو أننا لا نقوم بعمل تشفير ، ولكن نظام ترخيص بين PHP على الخادم و PHP باستخدام php.exe. في الجزء الثاني ، سنضيف كعكة ثانية إلى "الكعكة" ، والتي سنرى فيها شيئًا متعلقًا بالتعدين و blockchain والمعاملات.
بعد 15-25 دقيقة أخرى ، كانت وظيفة التخويل جاهزة. انظر هذا الكود أدناه:
public function login ($walletId, $password) // { if ($this->db)
هذا الرمز هو تقريبا تسجيل ، لكنه يعمل في خوارزمية عكسية. لقد انتهى العمل مع المستخدمين.
postcondition
خلال هذا الوقت المثير للاهتمام عند قراءة المقال ، قمنا بما يلي:
- لقد تعرفنا لفترة قصيرة على العملة المشفرة ، وكيف يجب بناؤها بشكل صحيح.
- أجابوا بإيجاز على السؤال "هل من المنطقي عمل عملة مشفرة مركزية وأيضًا في PHP؟"
- تمت مناقشة الملاحظات قبل تنفيذ هذه المهمة
- نفذت نظام حسابات التشفير.
والآن ، يمكنك قراءة ما كان وراء الستائر:
تحت الستاركُتب هذا المقال حوالي 4-5 ساعات (كل غروب الشمس والمساء). خلال هذا الوقت ، كما كتبت ، لقد تطورت ، لكن عندما يتعلق الأمر بكتابة مقال عن حبراهار ، فإن رغبتي في تحقيق حلمي لا تتلاشى. في الواقع ، نظرًا لمفهوم OOP البسيط ، فقد كان من الأسهل بالنسبة لي استخدامه من MySQLi ، أو ما هو أسوأ من ذلك ، الوظائف العادية مع بادئة mysql_ ، والتي تعتبر قديمة ولم تعد مناسبة للتطوير في PHP.
ماذا سنفعل في المرة القادمة:
- دعونا نفعل التعدين.
- دعونا نفكر في كيفية ترتيب المعاملات والكتل.
- سنقوم بإجراء معاملات ، وسنعطي معنى لفئة Block غير المستخدمة.
شكرا للقراءة! أراك مرة أخرى! هذا هو مقالي الأول - أنا في انتظار النقد.