рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдореИрдВрдиреЗ рдмрд╛рдд рдХреА рдереА рдХрд┐ рдХреМрди рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдЙрд╕ рдЕрд╕рдлрд▓ рд╕реЗ рдХреА рд╣реИред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╕реНрд╡рдпрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЯреНрд░реИрдХрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред рдЪрд▓рд┐рдП рдХреЛрдИ рд╕рдВрдХреЛрдЪ рдирд╣реАрдВ рд╣реИ, рдЬрд╛рдиреЗ рджреАрдЬрд┐рдПредрд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪреА
- рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ PHP рдореЗрдВ рдПрдХ рдЕрд░реНрдз-рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд cryptocurrency рд▓рд┐рдЦрд╛ рд╣реИред (рднрд╛рдЧ 1 - рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛)
- рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ PHP рдореЗрдВ рдПрдХ рдЕрд░реНрдз-рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд cryptocurrency рд▓рд┐рдЦрд╛ рд╣реИред (рднрд╛рдЧ 2 - рд╡рд┐рдХрд╛рд╕)
рдЯреНрд░реИрдХрд░ рд╕реНрдерд╛рдкрдирд╛
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡реЗрдм рдЯреНрд░реИрдХрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ - рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреНрд░реИрдХрд░ - рдореВрд▓ рдФрд░ рд╡реЗрдм рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдиреЗрдЯрд┐рд╡-рдЯреНрд░реИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╡реАрдбреАрдПрд╕ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗредрдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╡реЗрдм рдЯреНрд░реИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╣рдо GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╣рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рд╣рдо рд╡реЗрдм рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдкреИрдб рдпрд╛ рдХрд╣реАрдВ рдФрд░ рдЦреЛрд▓реЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, index.php рдлрд╝рд╛рдЗрд▓ред рдпрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ: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']);
рдЖрдкрдХреЛ 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 рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдСрдЯреЛрд▓реИрдб.php рдлрд╝рд╛рдЗрд▓, рдХрдореНрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВредрд╣рдо Structure.php рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗредрдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп UserAPI.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдВрдЧреЗредBPN рдФрд░ phpblockchain рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВредрд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ App.php рдореЗрдВ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ - рдпрд╣ рд╡рд╣рд╛рдВ рд╕реЗ рдЬреБрдбрд╝реА рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдКрдкрд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛редNotComposer / рд╡рд┐рдХреНрд░реЗрддрд╛ / autoload.php
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛ рдХрд┐ рд╡реЗ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдореНрдкреЛрдЬрд╝рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдореВрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╡реЗ рдкреИрдХрдЧрд┐рд╕реНрдЯ рдкрд░ рднреА рдЧрд╛рдпрдм рд╣реИрдВред рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдлрд╛рдЗрд▓ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИредрд╕рдВрд░рдЪрдирд╛
рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд░реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХреЗред рд▓рд╛рдпрдмреНрд░реЗрд░реА UserAPI.php рдХреЛ рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╡реЙрд▓реЗрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрди рд╡реЙрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП App.php рдХреЗ рд▓рд┐рдПред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;
}
рдЖрджрд┐рдо рдХреЛрдб, рд╣реИ рдирд╛?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;
}
}
рдЕрдкреНрдк
рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдмрд╣реБрдд рддрд░реНрдХред рд╡рд╣ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдПрдХ рдЦрдирд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрддреБрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рд▓реЗрдирджреЗрди рднреЗрдЬрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдШрд░ рдХрд╛ рдмрдирд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПредрд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
рд╣рдордиреЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдмрдЯреБрдЖ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдореБрджреНрд░рд╛ рдХреЛрдб рджрд┐рдЦрд╛рддреЗ рд░рд╣реЗрдВрдЧреЗредрдЯреАрдПрд▓, рдбреЙтАФ тАФ FlyCoin FLC