WavesKit - Rangka kerja PHP untuk bekerja dengan blockchain Waves

МнС нравится PHP untuk kelajuan pembangunan dan mudah alih yang sangat baik. Ia sangat bagus apabila anda sentiasa mempunyai alat di dalam poket anda, bersedia untuk menyelesaikan masalah.

Agak memalukan apabila, apabila berkenalan dengan blockchain domestik Pelantar Gelombang dia tidak mempunyai PHP SDK siap sedia dalam senjatanya. Nah, saya terpaksa menulisnya.

Pada mulanya saya terpaksa menggunakan nod untuk menandatangani transaksi. Jadi, untuk menguruskan tiga alamat, tiga nod perlu dilancarkan... Ia adalah pemandangan yang menyedihkan, walaupun ia menyelesaikan beberapa masalah. Sehingga pemahaman datang bahawa bergantung pada nod adalah jalan buntu. Pertama, kerana fungsi yang terhad API, kedua, kerana kelajuan (nod sangat perlahan pada masa itu).

Saya memulakan dua kerja selari. Salah satunya adalah untuk membuat penjelajah blockchain yang akan menjadi pantas dan bebas sepenuhnya daripada API nod. Yang kedua ialah mengumpul semua fungsi untuk bekerja dengan Platform Waves di satu tempat. Ini adalah bagaimana projek muncul w8io ΠΈ WavesKit.

Langkah pertama di sebalik tabir blockchain Waves ialah pelayar w8io. Ia tidak mudah, tetapi kami masih berjaya menulis pengiraan bebas semua baki dan juga menemui ralat dalam pengiraan pada nod asal (program habuan pepijat Dengan cara ini, ia berfungsi untuk mereka, mereka membayar untuk kesilapan yang ditemui). Anda boleh mengetahui lebih lanjut tentang kefungsian pelayar w8io dalam topik ini: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Semasa bekerja pada w8io, saya sudah mempunyai keraguan, tetapi apabila kerja itu sampai ke penghujung logiknya dan saya mula mencipta SDK, keraguan saya telah disahkan. Saya tidak menemui beberapa fungsi di mana-mana, termasuk yang paling penting, fungsi kriptografi. Kemudian saya mula dengan membuat batu bata saya sendiri untuk asas. Beginilah mereka dilahirkan: Kod ABC untuk mengekod ke base58 (sebenarnya untuk mengekod mana-mana abjad kepada mana-mana), Curve25519 untuk mencipta dan mengesahkan tandatangan yang serasi (dengan pilihan pada steroid), Blake2b untuk mengira salah satu cincang (yang hanya tersedia sejak PHP 7.2), dsb.

Di sinilah saya harus berterima kasih Inala Kardanova untuk beberapa nasihat berharga yang menunjukkan saya ke arah komposer bukannya termasuk fail yang biasa saya, tetapi ketinggalan zaman.

Selepas beberapa bulan WavesKit telah dikeluarkan, keluar versi beta dan kini bersedia untuk berfungsi dengan semua fungsi standard platform Waves. Semua tersedia di rangkaian utama transaksi boleh dibuat dengan mudah, ditandatangani dan dihantar menggunakan hanya satu pakej, berjalan pada semua versi 64-bit PHP daripada 5.6 termasuk.

Kami menyambungkan WavesKit ke projek kami:

composer require deemru/waveskit

Kami guna:

use deemruWavesKit;
$wk = new WavesKit( 'T' );
$wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );
$tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) );
$tx = $wk->ensure( $tx );

Dalam contoh di atas, kami mencipta objek WavesKit yang berjalan pada testnet "T". Kami memasang frasa benih yang daripadanya kunci dan alamat akaun dikira secara automatik berdasarkan kunci awam. Seterusnya, kami mencipta transaksi pemindahan 0.00000001 Gelombang daripada alamat yang dikira secara automatik menggunakan frasa benih ke alamat alias "ujian", pindahkannya untuk ditandatangani dengan kunci peribadi dan hantar ke rangkaian. Selepas ini, kami memastikan transaksi itu berjaya disahkan oleh rangkaian.

Bekerja dengan urus niaga tertumpu pada fungsi bermula dengan tx. Untuk pemahaman yang lebih baik tentang bekerja dengan transaksi, anda boleh belajar Dokumentasi WavesKit atau segera beralih kepada contoh ilustrasi dalam ujian integrasi berterusan.

Memandangkan WavesKit telah dibangunkan dalam penggunaan dunia nyata, ia sudah mempunyai ciri-ciri lanjutan. Ciri pembunuh pertama ialah memastikan fungsi, yang mengawal pencapaian tahap keyakinan yang diperlukan bahawa transaksi itu tidak hilang, tetapi, sebaliknya, telah disahkan dan mencapai bilangan pengesahan yang diperlukan dalam rangkaian.

Satu lagi mekanisme kalis peluru ialah cara WavesKit berkomunikasi dengan nod. Dalam keadaan rumah hijau, rangka kerja hanya berfungsi dengan nod utama, mengekalkan sambungan berterusan dengannya, tetapi sekiranya berlaku ralat ia boleh bertukar secara automatik kepada nod sandaran. Jika anda menyediakan tatasusunan nod sandaran, anda boleh memanggil fungsi tersebut setBestNode untuk menentukan nod terbaik sebagai nod utama berdasarkan nilai maksimum ketinggian semasa dan kelajuan tindak balas. Sekarang tambahkan pada ini cache pertanyaan dalaman dan rasa prihatin untuk kedua-dua pengguna dan pemilik nod.

Salah satu mekanisme canggih terkini ialah fungsi txMonitor. Ia muncul kerana keperluan untuk bertindak balas terhadap transaksi masuk dalam masa nyata. Fungsi ini menyelesaikan sepenuhnya semua nuansa yang berkaitan dengan pemprosesan transaksi dalam rantaian blok. Tiada lagi kesakitan, cuma sediakan fungsi panggil balik anda dengan pilihan yang diingini dan tunggu transaksi baharu untuk memulakan proses anda. Sebagai contoh, satu lagi projek saya VECRO dibina sepenuhnya di sekeliling fungsi ini, anda boleh mengkaji dengan mudah cara ia berfungsi secara langsung dalam kod projek.

Saya suka sumber terbuka, ia adalah salah satu pencapaian terbesar manusia. Memandangkan saya satu-satunya pembangun dan telah mencapai keadaan di mana semua keperluan saya diselesaikan, saya menjemput anda untuk menggunakan dan menyumbang WavesKit.

Sumber: www.habr.com

Tambah komen