WavesKit - πλαίσιο PHP για εργασία με την αλυσίδα μπλοκ Waves

Мне нравится PHP για ταχύτητα ανάπτυξης και εξαιρετική φορητότητα. Είναι πολύ καλό όταν έχεις πάντα ένα εργαλείο στην τσέπη σου, έτοιμο να λύνει προβλήματα.

Ήταν πολύ κρίμα όταν, κατά τη γνωριμία με το εγχώριο blockchain Πλατφόρμα κυμάτων δεν είχε έτοιμο PHP SDK στο οπλοστάσιό του. Λοιπόν, έπρεπε να το γράψω.

Στην αρχή έπρεπε να χρησιμοποιήσω κόμβους για την υπογραφή συναλλαγών. Έτσι, για τη διαχείριση τριών διευθύνσεων χρειάστηκε να ξεκινήσουμε τρεις κόμβους... Ήταν ένα θλιβερό θέαμα, αν και έλυσε κάποια προβλήματα. Μέχρι να καταλάβουμε ότι το να βασιζόμαστε στους κόμβους ήταν αδιέξοδο. Πρώτον, λόγω περιορισμένης λειτουργικότητας API, δεύτερον, λόγω της ταχύτητας (οι κόμβοι ήταν πολύ αργοί εκείνες τις μέρες).

Ξεκίνησα δύο παράλληλες δουλειές. Το ένα είναι να φτιάξετε έναν εξερευνητή blockchain που θα είναι γρήγορος και εντελώς ανεξάρτητος από το API του κόμβου. Το δεύτερο είναι να συγκεντρώσετε όλες τις λειτουργίες για την εργασία με την πλατφόρμα Waves σε ένα μέρος. Έτσι εμφανίστηκαν τα έργα w8io и WavesKit.

Το πρώτο βήμα στα παρασκήνια του blockchain Waves ήταν πρόγραμμα περιήγησης w8io. Δεν ήταν εύκολο, αλλά καταφέραμε να γράψουμε έναν ανεξάρτητο υπολογισμό όλων των υπολοίπων και ακόμη και να βρούμε ένα σφάλμα στους υπολογισμούς στους αρχικούς κόμβους (πρόγραμμα bug-bounty Παρεμπιπτόντως, τους λειτουργεί, πληρώνουν για τα λάθη που βρέθηκαν). Μπορείτε να μάθετε περισσότερα σχετικά με τη λειτουργικότητα του προγράμματος περιήγησης w8io σε αυτό το θέμα: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Ενώ δούλευα στο w8io, είχα ήδη αμφιβολίες, αλλά όταν η δουλειά έφτασε στο λογικό της τέλος και άρχισα να δημιουργώ το SDK, οι αμφιβολίες μου επιβεβαιώθηκαν. Δεν μπόρεσα να βρω κάποιες λειτουργίες πουθενά, συμπεριλαμβανομένων των πιο σημαντικών, κρυπτογραφικών. Μετά ξεκίνησα φτιάχνοντας τα δικά μου τούβλα για το θεμέλιο. Έτσι γεννήθηκαν: Κωδικός ABC για να κωδικοποιήσετε στο base58 (στην πραγματικότητα για να κωδικοποιήσετε οποιοδήποτε αλφάβητο σε οποιοδήποτε), Curve25519 για να δημιουργήσετε και να επαληθεύσετε συμβατές υπογραφές (με επιλογές στα στεροειδή), Blake2b για να υπολογίσετε έναν από τους κατακερματισμούς (που ήταν διαθέσιμος μόνο από την PHP 7.2) κ.λπ.

Εδώ πρέπει να ευχαριστήσω Inala Kardanova για μερικές πολύτιμες συμβουλές που με οδήγησαν στην κατεύθυνση συνθέτης αντί να συμπεριλάβω αρχεία που μου είναι γνωστά, αλλά ξεπερασμένα.

Μετά από μερικούς μήνες Κυκλοφόρησε το WavesKit, βγήκε εκδόσεις beta και είναι πλέον έτοιμο να λειτουργήσει με όλες τις τυπικές λειτουργίες της πλατφόρμας Waves. Όλα διαθέσιμα σε κύριο δίκτυο Οι συναλλαγές μπορούν εύκολα να δημιουργηθούν, να υπογραφούν και να αποσταλούν χρησιμοποιώντας ένα μόνο πακέτο, που εκτελείται σε όλες τις εκδόσεις 64-bit της PHP από την έκδοση 5.6 συμπεριλαμβανομένων.

Συνδέουμε το WavesKit με το έργο μας:

composer require deemru/waveskit

Χρησιμοποιούμε:

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

Στο παραπάνω παράδειγμα, δημιουργούμε ένα αντικείμενο WavesKit που εκτελείται στο δίκτυο δοκιμής "T". Εγκαθιστούμε μια αρχική φράση από την οποία υπολογίζονται αυτόματα τα κλειδιά και η διεύθυνση του λογαριασμού με βάση το δημόσιο κλειδί. Στη συνέχεια, δημιουργούμε μια συναλλαγή μεταφοράς 0.00000001 Waves από τη διεύθυνση που υπολογίζεται αυτόματα με τη χρήση της φράσης στη διεύθυνση ψευδώνυμο "test", τη μεταφέρουμε για υπογραφή με ένα ιδιωτικό κλειδί και την στέλνουμε στο δίκτυο. Μετά από αυτό, βεβαιωνόμαστε ότι η συναλλαγή επιβεβαιώνεται με επιτυχία από το δίκτυο.

Η εργασία με τις συναλλαγές επικεντρώνεται σε συναρτήσεις που ξεκινούν με tx. Για καλύτερη κατανόηση της εργασίας με τις συναλλαγές, μπορείτε να μελετήσετε Τεκμηρίωση WavesKit ή στραφείτε αμέσως σε επεξηγηματικά παραδείγματα στο δοκιμές συνεχούς ολοκλήρωσης.

Δεδομένου ότι το WavesKit έχει αναπτυχθεί σε πραγματικό κόσμο, διαθέτει ήδη προηγμένες λειτουργίες. Το πρώτο χαρακτηριστικό δολοφόνος είναι εξασφαλίσει τη λειτουργία, το οποίο ελέγχει την επίτευξη του απαιτούμενου επιπέδου εμπιστοσύνης ότι η συναλλαγή δεν χάθηκε, αλλά, αντίθετα, επιβεβαιώθηκε και έφτασε στον απαιτούμενο αριθμό επιβεβαιώσεων στο δίκτυο.

Ένας άλλος αλεξίσφαιρος μηχανισμός είναι ο τρόπος με τον οποίο το WavesKit επικοινωνεί με τους κόμβους. Σε συνθήκες θερμοκηπίου, το πλαίσιο λειτουργεί μόνο με τον κύριο κόμβο, διατηρώντας σταθερή σύνδεση με αυτόν, αλλά σε περίπτωση σφαλμάτων μπορεί να μεταβεί αυτόματα σε εφεδρικά. Εάν ρυθμίσετε μια συστοιχία κόμβων αντιγράφων ασφαλείας, μπορείτε να καλέσετε τη συνάρτηση setBestNode για να προσδιορίσετε τον καλύτερο κόμβο ως τον κύριο με βάση τη μέγιστη τιμή του τρέχοντος ύψους και την ταχύτητα απόκρισης. Τώρα προσθέστε σε αυτό μια εσωτερική κρυφή μνήμη ερωτήματος και νοιώστε ότι νοιάζεστε τόσο για τους χρήστες όσο και για τους κατόχους κόμβων.

Ένας από τους πιο πρόσφατους προηγμένους μηχανισμούς είναι η λειτουργία txMonitor. Εμφανίστηκε λόγω της ανάγκης ανταπόκρισης στις εισερχόμενες συναλλαγές σε πραγματικό χρόνο. Αυτή η λειτουργία λύνει πλήρως όλες τις αποχρώσεις που σχετίζονται με την επεξεργασία των συναλλαγών στο blockchain. Όχι άλλος πόνος, απλώς ρυθμίστε τη λειτουργία επανάκλησης με τις επιθυμητές επιλογές και περιμένετε νέες συναλλαγές για να ξεκινήσουν οι διαδικασίες σας. Για παράδειγμα, ένα άλλο έργο μου VECRO πλήρως χτισμένο γύρω από αυτή τη λειτουργία, μπορείτε εύκολα να μελετήσετε απευθείας πώς λειτουργεί στον κώδικα του έργου.

Λατρεύω το ανοιχτό κώδικα, είναι ένα από τα μεγαλύτερα επιτεύγματα της ανθρωπότητας. Επειδή είμαι ο μόνος προγραμματιστής και έχω φτάσει σε μια κατάσταση όπου όλες οι ανάγκες μου έχουν λυθεί, σας προσκαλώ να χρησιμοποιήσετε και να συνεισφέρετε WavesKit.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο