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
- Ketika saya menulis cryptocurrency semi-desentralisasi dalam PHP. (Bagian 1 - Mengoleksi Perpustakaan)
- 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
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.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.