Kata Pengantar
Ya, Anda hanya memikirkannya, cryptocurrency terpusat di PHP, ini tidak benar. Tetapi keterbatasan saya pada gagasan tetap berjalan, oleh karena itu, seperti yang Anda duga, saya memutuskan untuk menulisnya. Pada bagian pertama, kami akan memberi tahu Anda apa itu cryptocurrency, mendiskusikan catatan awal, dan membuat sistem dompet. Sekarang, mari kita mulai.
Cryptocurrency, seperti apa itu?
informasi diambil dari Wikipedia
Cryptocurrency adalah jenis mata uang digital, akuntansi unit penyelesaian internal yang dijamin oleh sistem pembayaran terdesentralisasi (tidak ada administrator internal atau eksternal atau analog apa pun darinya), yang bekerja dalam mode sepenuhnya otomatis.
Cryptocurrency itu sendiri tidak memiliki bahan khusus atau bentuk elektronik - itu hanya nomor yang menunjukkan jumlah data unit penyelesaian, yang ditulis dalam posisi yang sesuai dari paket informasi dari protokol transfer data dan seringkali bahkan tidak dienkripsi, seperti semua informasi lain tentang transaksi antara alamat sistem.
Singkatnya, cryptocurrency berfungsi seperti ini:
- Pengguna jaringan, yang memiliki saldo, mengirim transaksi ke pengguna anonim lain.
- Transaksi memasuki jaringan.
- Penambang (atau pengguna membuat blok) menyelesaikan masalah yang dihasilkan oleh algoritma khusus dengan kondisi (misalnya, untuk keberadaan 10-30 nol sebelumnya dalam hash, atau sebaliknya).
- Ketika suatu kondisi (atau kondisi) dipenuhi dalam sebuah hash, terima kasih untuk itu, penambang mengirim pesan ke jaringan yang menginformasikan tentang pembuatan blok baru dan transaksi.
- Penerima menerima dana, dan penambang menerima jumlah remunerasi, dalam bentuk komisi yang dihitung selama persiapan tugas.
Apakah masuk akal untuk menulis cryptocurrency terpusat, dan juga dalam PHP?
Saya pikir tidak terlalu. Tetapi coba lagi sebagaimana mestinya.
Kami mempertimbangkan catatan sebelum pengembangan
Kami akan menggunakan sistem verifikasi hash ganda menggunakan Bukti-of-Work. Masuk akal untuk memeriksa hash di tingkat perangkat lunak dan aplikasi jaringan. Ini karena proses mengoptimalkan beban di server. Karena ketika kita pergi ke server untuk memeriksa hash berkali-kali, beban seperti itu akan muncul. Oleh karena itu, saya mengusulkan untuk melakukan metode berikut:
- Pada penambang perangkat lunak, periksa hash secara lokal untuk memenuhi persyaratan.
- Ketika kondisi pada penambang perangkat lunak bertepatan dengan kondisi yang diperlukan, kami melakukan pemeriksaan di tingkat jaringan aplikasi (di tingkat server).
Ini, menurut saya, adalah cara terbaik untuk mendistribusikan beban. Lebih mudah untuk memeriksa beberapa kali secara lokal di komputer daripada permintaan spam ke server berkali-kali.
Nama - Saya datang dengan nama yang sederhana, dan mungkin mudah diingat - FlyCoin dengan kode mata uang FLC tiga digit.
Basis Data - Saya akan menggunakan opsi yang sederhana dan nyaman, PDO.
Crypto-wallet - akan dihasilkan menggunakan GUID dan mt_rand, dan waktu POSIX akan digunakan sebagai seed.
Apakah Anda terlalu malas untuk memiliki fungsi pemeriksaan hash? - Ya, itu sebabnya saya memutuskan untuk mengambil kode dari satu penambang (open source) lama dari cryptocurrency Entropy (sudah mati), teman saya, Nikita.
Saya tidak percaya bahwa dia hanya menciptakan satu cryptocurrency. Apakah ada sesuatu yang lain?Secara umum, semua ciptaannya (yang kadang-kadang saya bahkan gunakan), dapat Anda temukan di grup
VKontakte- nya. Saya harap mereka berguna juga.
Ayo pergi!
Mari kita mulai dengan membuat kerangka kerja sistem masa depan kita. Mari kita mulai dengan pengembangan API aplikasi untuk cryptocurrency kita. Dan bingkainya terlihat sangat kosong sejauh ini.
<?php function checkHash ($hash, $exp) // $hash - , $exp - . Entropy Miner, . { $sum = 0;
Ini dia, bingkai mukjizat kita. Pertama-tama, kami menerapkan registrasi dan pembuatan GUID untuk dompet kami. Saya segera membuat definisi fungsi API kosong dan juga menemukan fungsi pembuatan GUID di Google. Jangan lupakan benih. Saya baru saja menemukan fungsi untuk mendapatkan seed, untuk mendapatkan GUID yang unik.
function make_seed () // PHP { list ($usec, $sec) = explode (' ', microtime ()); return $sec + $usec * 1000000; } mt_srand (make_seed ());
Bagus Dan fungsi untuk menghasilkan GUID untuk dompet terlihat seperti ini (dan juga rintisan itu sendiri):
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));
Karena kami melakukan semuanya secara anonim, kami tidak akan menyimpan IP atau E-Mail. Tidak ada konfirmasi Kami akan cukup. Dalam ~ 25 menit saya menulis fungsi registrasi. Hanya satu kata sandi yang diperlukan dari kami. Fungsi API akan mengembalikan dompet kepada kami.
public function register ($password) // $password - { if ($this->db)
Di sini saya menjelaskan secara singkat apa yang dilakukan baris ini atau itu.
Pesan adil untuk orang-orang dan programmer yang adil.Jika Anda telah meninggalkan kontak Anda di situs (di mana, mungkin, cryptocurrency ini akan ditemukan), dan mereka menulis sesuatu seperti ini kepada Anda:
"Halo, bisakah kamu membantu?" Saya terus mani di blockchain Anda, dan tiba-tiba saya kehilangan kata sandi saya, tolong bantu dan Anda akan baik-baik saja ”- silakan menolak tawaran ini. Inti dari cryptocurrency adalah penyimpanan angka yang digali dengan aman. Tidak ada yang dapat membuktikan bahwa ia memiliki akun. Dengan demikian, setiap penyerang bahkan dapat mencuri dana orang lain bahkan tanpa partisipasi korban! Tidak masalah, meskipun orang ini benar-benar pemilik akun, lebih baik menolak. Jika Anda kehilangan uang, itu berarti Anda tidak menyimpan data dari akun dengan benar. Untuk keamanan tambahan, kami tidak akan lagi menerapkan pemulihan kata sandi.
Fungsi hash yang disajikan di sini dapat direpresentasikan sebagai berikut:
Fungsi kerjanya seperti ini:
Kata sandi dimasukkan, kami memeriksa apakah basis data terhubung:
Ya, terhubung. (Mari kita membuat kata sandi 12345)Kami menghasilkan alamat dompet, dan menulis dalam $ walletId - kami mendapatkan sesuatu seperti ini: FLC @ c1cbe61d-a19d-4c82-ba17-3a577df0aeb5 (GUID ini dihasilkan oleh situs lain, saya kemudian menambahkan awalan FLC @ ke sana).
Kami menghitung hash teks biasa. Pada seri pertama, kami mendapatkan berikut: 0087196442FLC @ c1cbe61d-a19d-4c82 -ba17-3a577df0aeb59ee77779db5a44ef3f60044fcb0e1170218e642cb9adc0789ddd08871ad95c7e1d3b1391c6c79774d319b5141bd3b13b717c3d389206ede659cb280949feac66 ( banyak surat, jangan kaget).
Pada belokan kedua, hash akan menjadi seratus persen HMAC: 5e43cbb404c81efeb35162e5bba0766f20b340fbabcc66fd5f7a6a1993a8ccd43fc6384ac53f939acca4378681e2bb17912665memiliki lagi
Kami menulis semuanya dalam database.
Sebagai tanggapan, kami menulis nomor dompet yang dapat Anda gunakan untuk masuk.
Tidak, tidak terhubung.Dalam hal ini, Anda tidak perlu mengharapkan sesuatu yang sepadan, kembalikan FALSE.
Seperti inilah bentuk sistem pendaftaran yang canggih. Bahkan, tampilannya sangat sederhana. Dan dalam hal kode - jauh lebih rumit.
Kami akan menghabiskan lebih banyak waktu dan melakukan otorisasi. Dengan otorisasi, situasinya lebih sederhana. Kami sedang mencari akun, dan mencoba masuk, mengetahui algoritma pembuatan hash kata sandi yang umum. Kemudian kami memverifikasi, dan jika data benar, kami memberikan klien garis penting di mana data disimpan untuk komunikasi antara server dan penambang.
Dari diriku sendiri.Kedengarannya seperti yang kita lakukan bukan cryptocurrency, tetapi sistem otorisasi antara PHP di server dan PHP menggunakan php.exe. Pada bagian kedua, kita akan menambahkan kue kedua ke "kue" kita, di mana kita akan melihat sesuatu yang berkaitan dengan penambangan, blockchain dan transaksi.
Setelah 15-25 menit, fungsi otorisasi siap. Lihat kode di bawah ini:
public function login ($walletId, $password) // { if ($this->db)
Kode ini hampir pendaftaran, tetapi beroperasi dalam algoritma terbalik. Bekerja dengan pengguna telah berakhir.
Postcondition
Selama waktu yang menarik ini membaca artikel, kami melakukan hal berikut:
- Kami sempat berkenalan dengan cryptocurrency, dan bagaimana itu harus dibangun dengan benar.
- Mereka secara singkat menjawab pertanyaan, "Apakah masuk akal untuk membuat cryptocurrency terpusat, dan juga dalam PHP?"
- Catatan yang dibahas sebelum melakukan tugas ini
- Menerapkan sistem akun crypto.
Dan sekarang, Anda dapat membaca apa yang ada di balik tirai:
Di bawah tiraiArtikel ini ditulis sekitar 4-5 jam (sepanjang matahari terbenam dan sore). Selama masa ini, saya berkembang seperti yang saya tulis, tetapi ketika harus menulis artikel tentang Habrahabr, keinginan saya untuk memenuhi impian saya tidak hilang. Memang, karena konsep sederhana OOP, lebih mudah bagi saya untuk menggunakannya daripada MySQLi, atau lebih buruk, fungsi biasa dengan awalan mysql_, yang dianggap usang dan tidak lagi cocok untuk pengembangan dalam PHP.
Apa yang akan kita lakukan selanjutnya:
- Mari kita lakukan penambangan.
- Mari kita pertimbangkan bagaimana transaksi dan blok diatur.
- Kami akan melakukan transaksi, dan kami akan memberikan pengertian kepada kelas Blok yang tidak digunakan.
Terima kasih sudah membaca! Sampai jumpa lagi! Ini adalah artikel pertama saya - saya sedang menunggu kritik.