Ketika saya menulis cryptocurrency semi-desentralisasi dalam PHP. (Bagian 2 - Pengembangan)

Kata pengantar


Dalam salah satu artikel sebelumnya saya berbicara tentang perpustakaan mana yang berguna bagi kami dan membandingkan ide ini dengan yang tidak berhasil. Di bagian ini, kami akan mengembangkan cryptocurrency itu sendiri dan mengkonfigurasi pelacak. Jangan ragu, ayo pergi.

Daftar Artikel


  1. Ketika saya menulis cryptocurrency semi-desentralisasi dalam PHP. (Bagian 1 - Mengoleksi Perpustakaan)
  2. Ketika saya menulis cryptocurrency semi-desentralisasi dalam PHP. (Bagian 2 - Pengembangan)

Instalasi Pelacak


Sebelum kami mulai memasang pelacak web, saya akan memberi tahu Anda - perpustakaan mendukung dua jenis pelacak - Asli dan Web. Pelacak asli dapat digunakan pada berbagai VDS, dan mereka akan dengan mudah memelihara daftar pengguna di jaringan.
Di sini saya akan menggunakan pelacak Web yang dapat dengan mudah dipasang di situs.
Kami beralih ke repositori GitHub, yang saya bicarakan di bagian sebelumnya. Cabang master tidak menarik bagi kami, kami memilih web. Unduh arsip dengan utas ini, bongkar dan buka di pad indeks atau di tempat lain, di mana Anda inginkan, file index.php. Ini isi dari file tersebut:

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']);

Anda harus mengubah konstanta TRACKER_KEY menjadi banyak karakter berbeda sehingga tidak cocok dengan file asli.

Katakan ini:


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

Ini hanya sebuah contoh. Anda harus berubah dengan cara Anda sendiri. Kami memposting semuanya di hosting. Penyiapan pelacak web selesai.

Untuk apa pelacak ini?

Pengembangan


Umum


Karena ini adalah aplikasi kami, Anda perlu menghubungkan semua paket dan komponen, yaitu paket Komposer dan non-Komposer, membuat struktur akun dan basis data akun lokal, membuat interaksi antara aplikasi dan struktur, dan menginisialisasi aplikasi itu sendiri.

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';                    # 


Perpustakaan untuk BIP39 memerlukan pengetikan yang ketat, kami mendeklarasikannya di baris kode pertama.
Pustaka BIP39 dan BIP44 sendiri dimuat dengan file autoload.php, standar untuk Komposer.
Kami akan mendeklarasikan struktur data di Structure.php.

Fungsi untuk bekerja dengan dompet akan ada di file UserAPI.php.

Pustaka BPN dan phpblockchain tidak kompatibel dengan Composer, kami membuat file dengan nama yang mirip dengan Composer.

Kami mengeluarkan aplikasi itu sendiri di App.php - itu akan menjadi file yang terhubung terakhir di sana, karena kita harus memuat semuanya dari atas terlebih dahulu.

NotComposer / vendor / autoload.php


Saya sudah mengatakan bahwa kedua perpustakaan itu tidak kompatibel dengan Komposer, ada file yang bukan asli mereka, atau mereka tidak ada sama sekali, dan mereka juga hilang pada Packagist. Anda harus mengunduhnya secara manual, dan menghubungkannya. File ini dirancang untuk itu.

Struktur


Struktur data di sini dirancang untuk membuatnya lebih mudah untuk menangani dompet. Perpustakaan diperlukan untuk UserAPI.php untuk melakukan pekerjaan dengan dompet, yaitu mendaftar dan mengembalikan dompet, dan untuk App.php untuk menggunakan dompet ini.
Structure.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;
}


Kode primitif, kan?

UserAPI.php


Perantara antara Structure.php dan App.php adalah UserAPI.php. Melalui itu, kita sudah akan beroperasi dengan dompet, mendaftar yang baru dan mengembalikan yang sudah ada.

Kode file ini:

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;
	}
}


Aplikasi


Logika klien kami. Dia bertanggung jawab atas segalanya, untuk bekerja sebagai penambang, mendapatkan keseimbangan, mengirim transaksi, dan membuatnya menjadi buatan sendiri.

App.php
, . 3 — , .

Untuk meringkas


Kami berbicara banyak tentang sesuatu, tentang struktur, tentang menjaga dompet dan banyak hal. Di bagian selanjutnya, kami akan terus menunjukkan kode mata uang.

TL; DR
— — FlyCoin FLC

All Articles