كما كتبت عملة مشفرة شبه لامركزية في PHP. (الجزء 2 - التنمية)

مقدمة


في إحدى المقالات السابقة ، تحدثت عن المكتبات المفيدة لنا وقارنت هذه الفكرة مع تلك الفاشلة. في هذا الجزء ، سنقوم بتطوير العملة المشفرة نفسها وتكوين المتتبع. دعنا لا نتردد ، دعنا نذهب.

قائمة المواد


  1. كما كتبت عملة مشفرة شبه لامركزية في PHP. (الجزء الأول - جمع المكتبات)
  2. كما كتبت عملة مشفرة شبه لامركزية في PHP. (الجزء 2 - التنمية)

تركيب تعقب


قبل أن نبدأ بتثبيت متتبع الويب ، سأخبرك - المكتبة تدعم نوعين من المتتبع - الأصلي والويب. يمكن استخدام Track-Tracker على VDS المختلفة ، وسيحتفظون بسهولة بقوائم المستخدمين على الشبكة.
هنا سأستخدم أداة تعقب الويب التي يمكن تثبيتها بسهولة على الموقع.
ننتقل إلى مستودع جيثب ، الذي تحدثت عنه في الجزء السابق. لا يهمنا الفرع الرئيسي ، نختار الويب. قم بتنزيل الأرشيف باستخدام هذا الموضوع ، وافتحه وافتحه في لوحة الفهرس أو في مكان آخر ، حيث تفضل ، ملف index.php. هنا محتوى الملف:

index.php
<?php

/**
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * @package     Bit Points Network
 * @copyright   2020 Podvirnyy Nikita (Observer KRypt0n_)
 * @license     GNU GPLv3 <https://www.gnu.org/licenses/gpl-3.0.html>
 * @author      Podvirnyy Nikita (Observer KRypt0n_)
 * 
 * Contacts:
 *
 * Email: <suimin.tu.mu.ga.mi@gmail.com>
 * VK:    <https://vk.com/technomindlp>
 *        <https://vk.com/hphp_convertation>
 * 
 */

namespace BPN;

const TRACKER_KEY = 'EFJI#*$&(*#WEF(@Q#)(DFJSAO(@#*$)REFSKE)UJ*#@(&$';

require 'ext/DH-Generator/Generator.php';
require 'php/User.php';
require 'php/Tracker.php';

$tracker = new Tracker;
$tracker->update ();

if (isset ($_GET['r']))
    $tracker->processRequest ($_GET['r']);

يجب تغيير ثابت TRACKER_KEY إلى العديد من الأحرف المختلفة بحيث لا يتطابق مع الملف الأصلي.

دعنا نقول هذا:


const TRACKER_KEY = 'sdT*&Y&*YO*&T*OGTGYFIYYUFGKUHLIYIj9sfhysdphphdpsfhBLABLABLAhsidlfhlisd';

هذا مجرد مثال. يجب عليك التغيير بطريقتك الخاصة. ننشر كل شيء على الاستضافة. اكتمل إعداد متتبع الويب.

ما هو هذا المقتفي؟

تطوير


جنرال لواء


نظرًا لأن هذا هو تطبيقنا ، فأنت بحاجة إلى ربط جميع الحزم والمكونات ، أي الحزم الملحن وغير الملحن ، وإنشاء هيكل الحسابات وقاعدة البيانات المحلية للحسابات ، وإجراء التفاعل بين التطبيق والهياكل ، وتهيئة التطبيق نفسه.

General.php
<?php

declare (strict_types=1);

require_once __DIR__ . '/vendor/autoload.php'; #   

require_once 'PHP/Structure.php';              # 
require_once 'PHP/UserAPI.php';                # 

require_once 'NotComposer/vendor/autoload.php';#  - 

require_once 'PHP/App.php';                    # 


تتطلب مكتبة BIP39 كتابة صارمة ؛ نعلنها في الأسطر الأولى من التعليمات البرمجية.
يتم تحميل مكتبات BIP39 و BIP44 نفسها مع ملف autoload.php القياسي للملحن.
سنعلن بنية البيانات في Structure.php.

ستكون وظائف العمل مع المحافظ في ملف UserAPI.php.

مكتبات BPN و phpblockchain غير متوافقة مع Composer ، فنحن ننشئ ملفًا باسم Composer.

نزيل التطبيق نفسه في App.php - سيكون آخر ملف متصل هناك ، حيث يجب علينا أولاً تحميل كل شيء من الأعلى.

NotComposer / بائع / autoload.php


سبق أن قلت أن هاتين المكتبتين غير متوافقتين مع Composer ، فهناك ملفات ليست أصلية بالنسبة لهم ، أو أنها غير موجودة على الإطلاق ، كما أنها غائبة عن Packagist. يجب عليك تنزيلها يدويًا وربطها. تم تصميم هذا الملف لذلك.

بناء


تم تصميم هياكل البيانات هنا لتسهيل التعامل مع المحافظ. المكتبة ضرورية لـ UserAPI.php للقيام بالعمل مع المحافظ ، أي تسجيل واستعادة المحفظة ، و App.php لاستخدام هذه المحافظ.
هيكل. php
<?php

class Account
{
	public $address;
	public $publicKey;
	protected $privateKey;

	public function getPrivateKey ()
	{
		return $this->privateKey;
	}

	public function setPrivateKey ($key)
	{
		$this->privateKey = $key;
	}
}

class AccountChain
{
	public $accounts;
}


رمز بدائي ، أليس كذلك؟

UserAPI.php


الوسيط بين Structure.php و App.php هو UserAPI.php. من خلاله ، سنعمل بالفعل مع المحافظ ، وتسجيل المحافظ الجديدة واستعادة الموجودة.

كود هذا الملف:

UserAPI.php
<?php

use \FurqanSiddiqui\BIP39\BIP39;
use BIP\BIP44;

class User
{
	public $account;

	public function registerNewAccount ($password)
	{
		$mnemonic = BIP39::Generate (18);
		$seed = $mnemonic->generateSeed ($password, 256);

		$HDKey = BIP44::fromMasterSeed ($seed)->derive ("m/44'/0'/0'/0/1");

		$newAccount = new Account;
		$newAccount->address = '1x' . hash ('ripemd160', hash ('sha512', $HDKey->publicKey));
		$newAccount->publicKey = $HDKey->publicKey;
		$newAccount->setPrivateKey ($HDKey->privateKey);

		$accountChain = new AccountChain;
		$accountChain->accounts = [];
		$accountChain->accounts[] = $newAccount;
		
		return ['words' => $mnemonic->words, 'chain' => $accountChain];
	}

	public function registerNewAccountInChain (&$chain, $password, $prevAccountMnemonic)
	{
		$mnemonic = BIP39::Words ($prevAccountMnemonic);
		$seed = $mnemonic->generateSeed ($password, 256);

		$accountsCount = sizeof ($chain->accounts) + 1;

		$HDKey = BIP44::fromMasterSeed ($seed)->derive ("m/44'/0'/0'/0/{$accountsCount}");

		$newAccount = new Account;
		$newAccount->address = '1x' . hash ('ripemd160', hash ('sha512', $HDKey->publicKey));
		$newAccount->publicKey = $HDKey->publicKey;
		$newAccount->setPrivateKey ($HDKey->privateKey);

		$chain->accounts[] = $newAccount;

		return ['chain' => $chain];
	}

	public function restoreAccount ($mnemonic, $password, $accountNo)
	{
		$mnemonic = BIP39::Words ($mnemonic);
		$seed = $mnemonic->generateSeed ($password, 256);

		$HDKey = BIP44::fromMasterSeed ($seed)->derive ("m/44'/0'/0'/0/{$accountNo}");

		$newAccount = new Account;
		$newAccount->address = '1x' . hash ('ripemd160', hash ('sha512', $HDKey->publicKey));
		$newAccount->publicKey = $HDKey->publicKey;
		$newAccount->setPrivateKey ($HDKey->privateKey);

		$accountChain = new AccountChain;
		$accountChain->accounts = [];
		$accountChain->accounts[] = $newAccount;

		return $accountChain;
	}
}


التطبيق


منطق عملائنا. إنها مسؤولة عن كل شيء ، للعمل كمنجم ، والحصول على التوازن ، وإرسال المعاملات وجعلها محلية الصنع.

App.php
, . 3 — , .

كي تختصر


تحدثنا كثيرًا عن شيء ما ، عن الهياكل ، وعن الاحتفاظ بالمحافظ والكثير من الأشياء. في الجزء التالي ، سنستمر في إظهار رموز العملات.

TL ؛ د
— — FlyCoin FLC

All Articles