Τι πρέπει να φτιάξουμε ένα blockchain;

Ολόκληρη η ιστορία της ανθρωπότητας είναι μια συνεχής διαδικασία απαλλαγής από αλυσίδες και δημιουργίας νέων, ακόμα πιο δυνατών. (Ανώνυμος συγγραφέας)

Αναλύοντας πολυάριθμα έργα blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin κ.λπ.), καταλαβαίνω ότι από τεχνική άποψη, όλα είναι χτισμένα στις ίδιες αρχές. Τα blockchain θυμίζουν σπίτια, τα οποία, παρά την ποικιλία σχεδίων, διακόσμησης και σκοπών, έχουν θεμέλιο, τοίχους, στέγη, παράθυρα, πόρτες που συνδέονται μεταξύ τους με συγκεκριμένους τρόπους. Και αν κατανοείτε τις βασικές αρχές του σχεδιασμού του κτιρίου και γνωρίζετε τις ιδιότητες των υλικών που χρησιμοποιούνται, τότε μπορείτε να προσδιορίσετε τον επιδιωκόμενο σκοπό ενός συγκεκριμένου σπιτιού. Επί του παρόντος, έχει προκύψει μια κατάσταση με το blockchain που όλοι έχουν ακούσει για αυτό, αλλά λίγοι άνθρωποι κατανοούν την αρχιτεκτονική και τις αρχές λειτουργίας. Επομένως, υπάρχει μια παρανόηση για το γιατί και πώς είναι λογικό να χρησιμοποιούνται τεχνολογίες blockchain.

Σε αυτό το άρθρο θα αναλύσουμε τις ιδιότητες και τις αρχές που είναι κοινές σε όλα τα blockchain. Στη συνέχεια, ας δούμε τα προβλήματα που μπορούν να λυθούν χρησιμοποιώντας το blockchain και για να ενισχύσουμε το υλικό, ας δημιουργήσουμε ένα μικρό αλλά πραγματικό blockchain στον εικονικό μας ιστότοπο!

Λοιπόν, ας θυμηθούμε ποια προβλήματα έλυσε αρχικά το blockchain.

Είμαι σίγουρος ότι πολλοί θα πουν για μια κατανεμημένη, αποκεντρωμένη, δημόσια και αμετάβλητη βάση δεδομένων. Γιατί όμως ήταν απαραίτητο όλο αυτό;

Προτιμώ να αρχίσω να μελετώ οποιαδήποτε τεχνολογία διαβάζοντας τα πρότυπα, αφού όλα τα άρθρα και τα βιβλία για το υπό μελέτη θέμα βασίζονται σε αυτά. Αλλά επί του παρόντος δεν υπάρχουν πρότυπα blockchain· το ISO έχει δημιουργήσει μόνο επιτροπές για την ανάπτυξή τους. Επί του παρόντος, κάθε δημόσιο έργο blockchain έχει το δικό του έγγραφο Λευκής Βίβλου, το οποίο είναι ουσιαστικά μια τεχνική προδιαγραφή. Το πρώτο δημοσίως γνωστό έργο blockchain είναι το δίκτυο Bitcoin. Μεταβείτε στον επίσημο ιστότοπο του δικτύου και κοιτάξτε εκεί που ξεκίνησαν όλα.

Πρόκληση Blockchain

Έτσι, το καθήκον που έλυσε το blockchain στο πρωτοποριακό δίκτυο Bitcoin είναι να πραγματοποιήσει μια αξιόπιστη μεταβίβαση ιδιοκτησίας ψηφιακών περιουσιακών στοιχείων (περιουσιακών στοιχείων) σε ένα μη αξιόπιστο περιβάλλον χωρίς μεσάζοντες. Για παράδειγμα, στο δίκτυο Bitcoin, ένα ψηφιακό περιουσιακό στοιχείο είναι τα ψηφιακά νομίσματα bitcoin. Και όλες οι τεχνικές λύσεις του Bitcoin και άλλων blockchain καταλήγουν στην επίλυση αυτού του προβλήματος.

Προβλήματα που λύνει το blockchain

Ας υποθέσουμε ότι ένας συγκεκριμένος χρηματοοικονομικός οργανισμός λέει ότι έχει δημιουργήσει ένα δίκτυο σε όλο τον κόσμο με τη βοήθεια του οποίου είναι δυνατή η μεταφορά χρημάτων σε οποιοδήποτε άτομο. Θα την πιστέψεις; Εάν αυτός ο οργανισμός είναι Visa ή MasterCard, πιθανότατα θα το πιστέψετε, αλλά αν, σχετικά μιλώντας, AnonymousWorldMoney, μάλλον δεν θα το πιστέψετε. Γιατί; Επειδή όμως γνωρίζουμε πολύ καλά πώς κατασκευάζονται τα κατανεμημένα συστήματα από ιδιωτικές εταιρείες, για ποιους σκοπούς και σε τι μπορεί να οδηγήσει αυτό. Ας ρίξουμε μια πιο προσεκτική ματιά στα προβλήματα τέτοιων συστημάτων και πώς μπορούν να επιλυθούν χρησιμοποιώντας τεχνολογίες blockchain.

Ας πούμε ότι στο υπό όρους AnonymousWorldMoney υπάρχουν διακομιστές με βάσεις δεδομένων και είναι καλό αν υπάρχουν αρκετοί από αυτούς σε διαφορετικά κέντρα δεδομένων. Όταν ο αποστολέας μεταφέρει χρήματα, καταχωρείται μια συναλλαγή, η οποία αναπαράγεται σε όλους τους διακομιστές και τα χρήματα φτάνουν στον παραλήπτη.

Τι πρέπει να φτιάξουμε ένα blockchain;

Σε έναν ιδανικό κόσμο, αυτό το σχέδιο λειτουργεί εξαιρετικά, αλλά στον δικό μας προκύπτουν τα ακόλουθα προβλήματα:

  1. Το πρόβλημα της ταυτοποίησης των συμμετεχόντων από τη μια και η ανάγκη για ανωνυμία των συναλλαγών από την άλλη. Εκείνοι. πρέπει να μεταφέρετε χρήματα σε συγκεκριμένο παραλήπτη και με τέτοιο τρόπο ώστε κανείς να μην γνωρίζει για αυτή τη συναλλαγή εκτός από τους συμμετέχοντες στη συναλλαγή. Οι τράπεζες διαθέτουν αριθμούς λογαριασμών και τραπεζικές κάρτες που συνδέονται με ένα συγκεκριμένο φυσικό ή νομικό πρόσωπο και το τραπεζικό απόρρητο προστατεύει τις πληροφορίες συναλλαγών. Και ποιος εγγυάται ότι το υπό όρους AnonymousWorldMoney δεν χρησιμοποιεί προσωπικά δεδομένα και πληροφορίες συναλλαγών για δικούς του σκοπούς;
  2. Πώς να βεβαιωθείτε ότι ο παραλήπτης έλαβε ακριβώς το ποσό που του μεταφέρθηκε; Σχετικά μιλώντας, ο αποστολέας μετέφερε 100 $ και ο παραλήπτης έλαβε 10 $. Ο αποστολέας έρχεται στο γραφείο AnonymousWorldMoney με την απόδειξή του και ο υπάλληλος δείχνει την έκδοσή του, όπου γράφει ότι ο αποστολέας μετέφερε μόνο $10.
  3. Το πρόβλημα ενός μη αξιόπιστου περιβάλλοντος, για παράδειγμα, μιας απάτης που ονομάζεται διπλή δαπάνη. Ένας αδίστακτος συμμετέχων μπορεί να ξοδέψει το υπόλοιπό του πολλές φορές έως ότου η πληρωμή επαναληφθεί σε όλους τους διακομιστές. Θεώρημα CAP, φυσικά, κανείς δεν ακύρωσε, και συμφωνία θα επιτευχθεί τελικά, αλλά κάποιος δεν θα λάβει χρήματα για τις υπηρεσίες ή τα αγαθά που παρέχονται. Επομένως, εάν δεν υπάρχει πλήρης εμπιστοσύνη στον οργανισμό πληρωμών ή στους συμμετέχοντες σε συναλλαγές, τότε είναι απαραίτητο να οικοδομήσουμε ένα δίκτυο που να βασίζεται όχι στην εμπιστοσύνη, αλλά στην κρυπτογραφία.
  4. Το υπό όρους AnonymousWorldMoney έχει έναν πεπερασμένο αριθμό διακομιστών που ενδέχεται να μην είναι διαθέσιμοι ακούσια ή λόγω κακόβουλης πρόθεσης.
  5. Το AnonymousWorldMoney θα λάβει τη δική του απτή προμήθεια.
  6. Δυνατότητα ελέγχου. Κατά τη λειτουργία του Bitcoin, αποδείχθηκε ότι οι άνθρωποι θέλουν όχι μόνο να μεταφέρουν νομίσματα ο ένας στον άλλο, αλλά και να ελέγχουν διάφορες συνθήκες για τη συναλλαγή, να προγραμματίζουν σενάρια εργασίας, να εκτελούν αυτόματα ενέργειες ανάλογα με τις συνθήκες κ.λπ.

Πώς το blockchain λύνει αυτά τα προβλήματα

  1. Η αναγνώριση των συμμετεχόντων πραγματοποιείται χρησιμοποιώντας ένα ζεύγος κλειδιών: ιδιωτικό και δημόσιο, και ο αλγόριθμος ψηφιακής υπογραφής προσδιορίζει μοναδικά τον αποστολέα και τον παραλήπτη, αφήνοντας την ταυτότητά τους ανώνυμη.
  2. Οι συναλλαγές συλλέγονται σε μπλοκ, ο κατακερματισμός του μπλοκ υπολογίζεται και γράφεται στο επόμενο μπλοκ. Αυτή η ακολουθία καταγραφής κατακερματισμών σε μπλοκ δίνει το όνομά της στην τεχνολογία blockchain και επίσης καθιστά αδύνατη την απαρατήρητη αλλαγή / διαγραφή μπλοκ ή μεμονωμένων συναλλαγών από μπλοκ. Έτσι, εάν μια συναλλαγή περιλαμβάνεται στο blockchain, μπορείτε να είστε σίγουροι ότι τα δεδομένα της θα παραμείνουν αμετάβλητα.
  3. Η απάτη διπλής δαπάνης αποτρέπεται με την επίτευξη συναίνεσης δικτύου σχετικά με το ποια δεδομένα πρέπει να θεωρούνται έγκυρα και ποια να απορριφθούν. Στο δίκτυο Bitcoin, η συναίνεση επιτυγχάνεται με την απόδειξη της εργασίας (PoW).
  4. Η αξιοπιστία του δικτύου επιτυγχάνεται από το γεγονός ότι το blockchain είναι δημόσιο, όπου κάθε συμμετέχων μπορεί να εκτελέσει τον δικό του κόμβο, να λάβει ένα πλήρες αντίγραφο του blockchain και, επιπλέον, να αρχίσει ανεξάρτητα να ελέγχει τις συναλλαγές για ορθότητα. Θα πρέπει να σημειωθεί ότι τα σύγχρονα blockchain καθιστούν δυνατή τη δημιουργία όχι μόνο δημόσιων (ανοιχτών) αλλά και ιδιωτικών (κλειστών) blockchains, καθώς και τη χρήση συνδυασμένων σχημάτων.
  5. Το blockchain δεν θα απαλλαγεί εντελώς από τις προμήθειες, γιατί... πρέπει να πληρώσεις τους ανθρώπους που υποστηρίζουν το δίκτυο, αλλά στο blockchain η ανάγκη για προμήθεια αποδεικνύεται τόσο πειστικά που δεν υπάρχει αμφιβολία για την αναγκαιότητά της.
  6. Τα σύγχρονα blockchain έχουν τη δυνατότητα να εφαρμόζουν επιχειρηματική λογική, η οποία στο blockchain ονομάζεται Smart Contracts. Η λογική των έξυπνων συμβολαίων εφαρμόζεται σε διάφορες γλώσσες υψηλού επιπέδου.

Στη συνέχεια, θα εξετάσουμε αυτές τις λύσεις με περισσότερες λεπτομέρειες.

Αρχιτεκτονική blockchain

Συστατικά Blockchain

Κάθε συμμετέχων μπορεί να ξεκινήσει τον δικό του κόμβο με ένα πλήρες αντίγραφο του blockchain (πλήρης κόμβος). Καλούνται οι πλήρεις κόμβοι που μπορούν να καταγράφουν συναλλαγές στο blockchain κόμβοι συναίνεσης (μάρτυρας) ή ανθρακωρύχοι (ανθρακωρύχος). Καλούνται πλήρεις κόμβοι που ελέγχουν μόνο την ορθότητα των συναλλαγών κόμβοι ελέγχου (έλεγχος). Light πελάτες (ελαφροί πελάτες) δεν αποθηκεύουν πλήρη αντίγραφα του blockchain, αλλά αλληλεπιδρούν με το δίκτυο χρησιμοποιώντας πλήρεις κόμβους.
Οι περισσότεροι χρήστες χρησιμοποιούν light clients ή web wallets για να κάνουν συναλλαγές. Όλοι οι κόμβοι συνδέονται μεταξύ τους. Με αυτό το σύνολο στοιχείων, η αρχιτεκτονική του δικτύου γίνεται πιο σταθερή:

Τι πρέπει να φτιάξουμε ένα blockchain;

Κύκλος ζωής συναλλαγών

Ας δούμε τον κύκλο ζωής της συναλλαγής και ας τον αναλύσουμε κομμάτι-κομμάτι:

Τι πρέπει να φτιάξουμε ένα blockchain;

Τεχνολογίες blockchain

Ας σταθούμε λεπτομερέστερα στις τεχνικές λύσεις και τις συνδέσεις τους μεταξύ τους.

Ταυτοποίηση

Κάθε συναλλαγή blockchain πρέπει να υπογράφεται ψηφιακά. Επομένως, για να ολοκληρωθεί μια συναλλαγή, κάθε συμμετέχων πρέπει να έχει ένα ζεύγος κλειδιών: ιδιωτικό / δημόσιο. Μερικές φορές ένα ζευγάρι κλειδιών ονομάζεται πορτοφόλι, επειδή τα κλειδιά συνδέονται μοναδικά με τη μοναδική ψηφιακή διεύθυνση και το υπόλοιπο του συμμετέχοντα. Στην πραγματικότητα, τα κλειδιά και οι διευθύνσεις είναι απλώς σειρές αριθμών σε διαφορετικά συστήματα αριθμών. Παραδείγματα κλειδιών και διευθύνσεων πορτοφολιού:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Για τη δημιουργία μιας ψηφιακής υπογραφής σε blockchains, χρησιμοποιείται ένας αλγόριθμος που βασίζεται σε ελλειπτικές καμπύλες: Elliptic Curve Digital Signature Algorithm (ECDSA). Για να λειτουργήσει, το ιδιωτικό κλειδί (αριθμός 256 bit) λαμβάνεται συνήθως τυχαία. Ο αριθμός των επιλογών κλειδιών είναι 2 στη δύναμη των 256, επομένως μπορούμε να μιλήσουμε για την πρακτική αδυναμία αντιστοίχισης των τιμών των ιδιωτικών κλειδιών.

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

Υπάρχουν πολλά άρθρα με λεπτομέρειες σχετικά με την κρυπτογραφία που χρησιμοποιείται στο blockchain, για παράδειγμα: Bitcoin με λίγα λόγια – Κρυπτογραφία

Το ιδιωτικό κλειδί πρέπει να είναι αυστηρά εμπιστευτικό και να διατηρείται ασφαλές. Το δημόσιο κλειδί είναι γνωστό σε όλους. Εάν χαθεί το ιδιωτικό κλειδί, η πρόσβαση στο στοιχείο (κέρματα) δεν μπορεί να αποκατασταθεί και τα χρήματα θα χαθούν για πάντα. Ως εκ τούτου, το έργο της ασφαλούς αποθήκευσης ιδιωτικών κλειδιών είναι εξαιρετικά σημαντικό, επειδή Αυτή δεν είναι μια τράπεζα όπου μπορείτε πάντα να έρθετε με το διαβατήριό σας και να επαναφέρετε τον λογαριασμό σας. Υπάρχει μια ολόκληρη βιομηχανία για την παραγωγή των λεγόμενων κρύων πορτοφολιών κρυπτογράφησης, παρόμοια με τις μονάδες flash:

Τι πρέπει να φτιάξουμε ένα blockchain;

ή μπορείτε να χρησιμοποιήσετε πιο αξιόπιστες μεθόδους, για παράδειγμα, σφραγίζοντας την τιμή του ιδιωτικού κλειδιού σε διακριτικά:

Τι πρέπει να φτιάξουμε ένα blockchain;

Συναλλαγές

Περισσότερες λεπτομέρειες σχετικά με τη δομή των συναλλαγών μπορείτε να βρείτε στο άρθρο Bitcoin με λίγα λόγια – Συναλλαγή. Είναι σημαντικό για εμάς να κατανοήσουμε ότι κάθε συναλλαγή έχει τουλάχιστον τα ακόλουθα δεδομένα:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Στη συνέχεια, η συναλλαγή υπογράφεται με ιδιωτικό κλειδί και αποστέλλεται (δείτε λεπτομέρειες σχετικά με τη λειτουργία του πρωτοκόλλου Bitcoin με λίγα λόγια-Πρωτόκολλο) σε όλους τους κόμβους στο blockchain που ελέγχουν τις συναλλαγές για εγκυρότητα. Ο αλγόριθμος επαλήθευσης συναλλαγής είναι μη τετριμμένος και περιλαμβάνει δύο δωδεκάδες βήματα.

Μπλοκ συναλλαγών

Αφού ελέγξουν την εγκυρότητα των συναλλαγών, οι κόμβοι σχηματίζουν μπλοκ από αυτές. Εκτός από τις συναλλαγές, ο κατακερματισμός του προηγούμενου μπλοκ και ένας αριθμός (μετρητής Nonce) γράφονται στο μπλοκ και ο κατακερματισμός του τρέχοντος μπλοκ υπολογίζεται χρησιμοποιώντας τον αλγόριθμο SHA-256. Ο κατακερματισμός πρέπει να έχει καθιερώσει συνθήκες πολυπλοκότητας. Για παράδειγμα, στο δίκτυο Bitcoin, η δυσκολία του κατακερματισμού αλλάζει αυτόματα κάθε 2 εβδομάδες ανάλογα με την ισχύ του δικτύου έτσι ώστε ένα μπλοκ να δημιουργείται περίπου μία φορά κάθε 10 λεπτά. Η πολυπλοκότητα καθορίζεται από την ακόλουθη συνθήκη: ο κατακερματισμός που βρέθηκε πρέπει να είναι μικρότερος από έναν προκαθορισμένο αριθμό. Εάν δεν πληρούται αυτή η συνθήκη, τότε προστίθεται 1 στο Nonce και η εργασία υπολογισμού του κατακερματισμού επαναλαμβάνεται. Για να επιλέξετε έναν κατακερματισμό, χρησιμοποιείται το πεδίο Nonce, επειδή Αυτά είναι τα μόνα δεδομένα στο μπλοκ που μπορούν να αλλάξουν· τα υπόλοιπα πρέπει να παραμείνουν αμετάβλητα. Ένας έγκυρος κατακερματισμός πρέπει να έχει έναν ορισμένο αριθμό αρχικών μηδενικών, όπως έναν από τους πραγματικούς κατακερματισμούς:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Η επιτυχής εύρεση ενός κατακερματισμού είναι απόδειξη της δουλειάς που έχει γίνει (Proof-of-Work, PoW) για τα δίκτυα Bitcoin ή Ethereum. Η διαδικασία εύρεσης hashes ονομάζεται εξόρυξη, παρόμοια με την εξόρυξη χρυσού. Το όνομα ορίζει με ακρίβεια την ουσία της διαδικασίας, γιατί υπάρχει μια απλή αναζήτηση επιλογών και αν κάποιος βρει ένα κατάλληλο hash, τότε αυτό είναι πραγματικά τύχη. Είναι σαν να βρίσκεις ένα πραγματικό ψήγμα χρυσού μέσα σε τόνους άχρηστων πετρωμάτων. Η ανταμοιβή μπλοκ είναι τώρα 12.5 BTC και αν την πολλαπλασιάσετε με την τρέχουσα ισοτιμία Bitcoin των 3900 $, θα λάβετε περισσότερο από ένα κιλό καθαρού χρυσού. Υπάρχει κάτι για να παλέψεις!

Μετά την επιτυχή εύρεση ενός κατακερματισμού, το μπλοκ και ο ίδιος ο κατακερματισμός που βρέθηκε γράφονται στο blockchain ως το επόμενο μπλοκ. Περισσότερες λεπτομέρειες σχετικά με τη δομή των μπλοκ μπορείτε να βρείτε στο άρθρο Bitcoin με λίγα λόγια-Blockchain, και παρακάτω είναι ένα απλοποιημένο διάγραμμα:

Τι πρέπει να φτιάξουμε ένα blockchain;

Το blockchain ξεκινά με ένα μπλοκ που δεν έχει ακόμη τον κατακερματισμό του προηγούμενου μπλοκ. Υπάρχει μόνο ένα τέτοιο μπλοκ στο blockchain και έχει το δικό του όνομα Genesis block. Τα υπόλοιπα μπλοκ έχουν την ίδια δομή και διαφέρουν μόνο στον αριθμό των συναλλαγών. Μπορείτε να δείτε τις πραγματικές συναλλαγές και τα μπλοκ που δημιουργούνται αυτήν τη στιγμή σε Bitcoin ή Ethereum Αποκλεισμός Explorer.

Το μέγεθος των μπλοκ στο Bitcoin περιορίζεται στο 1MB και με ελάχιστο όγκο πληροφοριών σε μια συναλλαγή περίπου 200 byte, ο μέγιστος αριθμός συναλλαγών σε ένα μπλοκ μπορεί να είναι περίπου 6000. Από εδώ, παρεμπιπτόντως, ακολουθεί η απόδοση του Bitcoin, με την οποία όλοι γελούν: ένα μπλοκ δημιουργείται περίπου μία φορά κάθε 10 λεπτά * 60 δευτερόλεπτα = 600 δευτερόλεπτα, που δίνει επίσημη απόδοση περίπου 10 TPS. Αν και στην πραγματικότητα, αυτό δεν είναι παραγωγικότητα, αλλά ένας σκόπιμα εφαρμοσμένος αλγόριθμος εργασίας. Στο Ethereum, για ανταγωνισμό, έκαναν απλώς τον χρόνο δημιουργίας μπλοκ 15 δευτερόλεπτα. και η παραγωγικότητα επισήμως εκτινάχθηκε στα ύψη. Επομένως, σε blockchains που χρησιμοποιούν το PoW ως συναίνεση, δεν έχει κανένα νόημα να συγκρίνουμε την απόδοση, γιατί εξαρτάται άμεσα από την πολυπλοκότητα του υπολογισμού της κρυφής μνήμης, η οποία μπορεί να εκχωρηθεί σε οποιαδήποτε τιμή.

Πιρούνια

Τι θα συμβεί αν, για παράδειγμα, αρκετοί κόμβοι βρήκαν κατακερματισμούς που πληρούν τις συνθήκες πολυπλοκότητας, αλλά έχουν διαφορετική αξία (με άλλα λόγια, κατέληξαν σε διαφορετικές συναινέσεις) και έγραψαν μπλοκ στην αλυσίδα μπλοκ; Ας δούμε πώς το blockchain προστατεύει από αυτήν την κατάσταση. Σε αυτήν την περίπτωση, εμφανίζεται ένα λεγόμενο fork και το blockchain έχει δύο εκδόσεις της αλυσίδας:

Τι πρέπει να φτιάξουμε ένα blockchain;

Τι συμβαίνει μετά? Στη συνέχεια, μέρος του δικτύου αρχίζει να λειτουργεί στο μπλοκ N+2 από μια αλυσίδα και μέρος από μια άλλη:

Τι πρέπει να φτιάξουμε ένα blockchain;

Ένα από αυτά τα μπλοκ θα βρεθεί νωρίτερα και θα σταλεί στο blockchain και, στη συνέχεια, σύμφωνα με τους κανόνες, το blockchain θα πρέπει να μεταβεί σε μια μεγαλύτερη αλυσίδα και να ακυρώσει όλες τις συναλλαγές από το εναλλακτικό μπλοκ:

Τι πρέπει να φτιάξουμε ένα blockchain;

Ταυτόχρονα, μπορεί να προκύψει μια κατάσταση όταν η συναλλαγή ενός συμμετέχοντα ήταν μόνο σε ένα από τα μπλοκ περόνης, το οποίο ακυρώθηκε. Επομένως, για να βεβαιωθείτε ότι η επιθυμητή συναλλαγή καταγράφεται στο blockchain, υπάρχει μια γενική σύσταση - προτού εμπιστευτείτε τη συναλλαγή, θα πρέπει να περιμένετε έως ότου προστεθούν τα επόμενα μπλοκ στο blockchain. Οι συστάσεις για το πόσα μπλοκ να περιμένετε για διαφορετικές αλυσίδες μπλοκ ποικίλλουν. Για παράδειγμα, για το δίκτυο Bitcoin το ελάχιστο είναι 2 μπλοκ, το μέγιστο είναι 6.

Η ίδια εικόνα με τα block forks θα παρατηρηθεί κατά τη λεγόμενη επίθεση 51% - αυτό συμβαίνει όταν μια ομάδα ανθρακωρύχων προσπαθεί να αναπτύξει μια εναλλακτική αλυσίδα μπλοκ, επιδιώκοντας να ακυρώσει την αλυσίδα με τις δόλιες συναλλαγές τους. Αν και επί του παρόντος, αντί για απάτη, είναι πιο κερδοφόρο να ξοδεύετε τη δύναμή σας σε ειλικρινή εξόρυξη.

Ομοφωνία

Για να καταγράψετε ένα μπλοκ στο blockchain, το δίκτυο πρέπει να καταλήξει σε συναίνεση. Ας θυμηθούμε το καθήκον της επίτευξης συναίνεσης στα δίκτυα επικοινωνίας υπολογιστών. Το πρόβλημα διατυπώνεται ως καθήκον των βυζαντινών στρατηγών BFT (Βυζαντινή αντοχή σφάλματος). Παραλείποντας τη γραφική περιγραφή των προβλημάτων του βυζαντινού στρατού, το πρόβλημα μπορεί να διατυπωθεί ως εξής: πώς μπορούν οι κόμβοι του δικτύου να έρθουν σε ένα κοινό αποτέλεσμα εάν κάποιοι κόμβοι του δικτύου μπορούν σκόπιμα να τους παραμορφώσουν. Οι υπάρχοντες αλγόριθμοι για την επίλυση του προβλήματος BFT δείχνουν ότι το δίκτυο μπορεί να λειτουργήσει σωστά εάν υπάρχουν λιγότεροι από το 1/3 των απατεώνων. Γιατί δεν έχει εφαρμοστεί συναίνεση BFT στο δίκτυο Bitcoin; Γιατί ήταν απαραίτητο να χρησιμοποιήσετε το PoW; Υπάρχουν διάφοροι λόγοι:

  • Το BFT λειτουργεί καλά με ένα μικρό σταθερό σύνολο κόμβων, αλλά σε ένα δημόσιο blockchain ο αριθμός των κόμβων είναι απρόβλεπτος και, επιπλέον, οι κόμβοι μπορούν να ενεργοποιηθούν και να απενεργοποιηθούν τυχαία.
  • Είναι απαραίτητο να παρακινήσουμε τους ανθρώπους να ξεκινήσουν κόμβους blockchain. Για να γίνει αυτό, οι άνθρωποι πρέπει να ανταμειφθούν. Στο BFT δεν υπάρχει επίσημα τίποτα για να λάβετε ανταμοιβή, αλλά ποια είναι η ανταμοιβή στο PoW είναι σαφές σε όλους σε ένα διαισθητικό επίπεδο: για την ηλεκτρική ενέργεια που καταναλώνει ο επεξεργαστής στη διαδικασία εύρεσης του κατακερματισμού μπλοκ.

Εκτός από το PoW, υπάρχουν πολλές άλλες συναινέσεις που χρησιμοποιούνται στα σύγχρονα blockchain, για παράδειγμα:

  • PoS (Proof-of-Stake) - στο blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - στο blockchain BitShares
  • Τροποποιήσεις του BFT: SBFT (Απλοποιημένο BFT) και PBFT (Πρακτικό BFT), για παράδειγμα στο blockchain Exonum

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

Η συναίνεση PoS βασίζεται στην επιλογή ενός κόμβου που μπορεί να γράψει ένα μπλοκ με συναλλαγές στο blockchain ανάλογα με το ποσό των κεφαλαίων στον λογαριασμό, ή μάλλον, όχι στον λογαριασμό, αλλά στην εξασφάλιση, δηλ. Όσο περισσότερα κεφάλαια έχετε ως εγγύηση, τόσο πιο πιθανό είναι το δίκτυο να επιλέξει τον κόμβο σας για να γράψει ένα μπλοκ. Η κατάθεση δεν θα επιστραφεί εάν το μπλοκ είναι άκυρο. Αυτό παρέχει προστασία κατά της απάτης. Υπάρχουν οι ακόλουθες παραλλαγές του PoS:

  • Η συναίνεση του Delegated PoS (DPoS) χωρίζει τους συμμετέχοντες σε «ψηφοφόρους» και «επικυρωτές». Οι κάτοχοι νομισμάτων (συμμετέχοντες στην ψηφοφορία) εκχωρούν την εξουσία τους να επαληθεύουν και να καταγράφουν τις συναλλαγές στο blockchain σε άλλους συμμετέχοντες. Έτσι, οι επικυρωτές κάνουν όλη την υπολογιστική εργασία και λαμβάνουν ανταμοιβή γι' αυτήν, και η παρουσία των συμμετεχόντων στην ψηφοφορία εγγυάται την ειλικρίνεια των επικυρωτών, επειδή μπορούν να αλλάξουν ανά πάσα στιγμή.
  • Η συναίνεση LPoS (Leased Proof-of-Stake) σάς επιτρέπει να μισθώσετε τα χρήματά σας σε άλλους κόμβους, ώστε να έχουν καλύτερες πιθανότητες επικύρωσης μπλοκ. Οτι. Μπορείτε να λάβετε προμήθεια για συναλλαγές χωρίς να συμμετέχετε στην πραγματική επαλήθευση συναλλαγών και στην εξόρυξη μπλοκ.

Υπάρχουν πολλές άλλες συναινέσεις που δεν χρησιμοποιούνται ακόμη ευρέως, απλώς θα τις παραθέσω εδώ για πληροφορίες και μια επισκόπηση των ίδιων των αλγορίθμων συναίνεσης μπορεί να βρεθεί, για παράδειγμα, στο άρθρο: Αλγόριθμοι συναίνεσης στο Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Απόδειξη Ικανότητας)
  • PoB (Απόδειξη εγκαύματος)
  • PoWeight (απόδειξη βάρους)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (Proof-of-Importans)

Αξιοπιστία και μοντέλα ανάπτυξης blockchains

Δημόσιο Blockchain

Βιωσιμότητα Δημόσιο ή άλλο όνομα blockchain χωρίς άδεια Αυτό επιτυγχάνεται επιτρέποντας σε οποιονδήποτε να συνδεθεί και να δει πληροφορίες ή ακόμα και να συνδέσει τον δικό του κόμβο και η εμπιστοσύνη βασίζεται στη συναίνεση PoW.

Ιδιωτικό blockchain

Private ή Ιδιωτική άδεια blockchain. Σε αυτά τα blockchains, μόνο μια συγκεκριμένη ομάδα συμμετεχόντων (οργανισμοί ή άτομα) έχει πρόσβαση σε πληροφορίες. Τέτοιες αλυσίδες μπλοκ δημιουργούνται από οργανισμούς με στόχο την αύξηση του συνολικού οφέλους ή της αποτελεσματικότητας. Η αξιοπιστία τους διασφαλίζεται από τους κοινούς στόχους των συμμετεχόντων και τους αλγόριθμους συναίνεσης PoS και BFT.

Κοινοπραξία Blockchain

Εκεί Κοινοπραξία ή Δημόσια άδεια blockchain. Πρόκειται για blockchain στις οποίες μπορεί να συνδεθεί οποιοσδήποτε για να τις δει, αλλά ένας συμμετέχων μπορεί να προσθέσει πληροφορίες ή να συνδέσει τον κόμβο του μόνο με την άδεια άλλων συμμετεχόντων. Τέτοιες αλυσίδες μπλοκ κατασκευάζονται από οργανισμούς προκειμένου να αυξηθεί η εμπιστοσύνη από την πλευρά των πελατών ή των καταναλωτών προϊόντων ή της κοινωνίας στο σύνολό της. Εδώ, η αξιοπιστία επιτυγχάνεται επίσης με την παρουσία εμπιστοσύνης μεταξύ των συμμετεχόντων και των ίδιων συναινετικών αλγορίθμων PoS και BFT.

Έξυπνα συμβόλαια

Οι αλυσίδες μπλοκ που εφαρμόζονται μετά το Bitcoin έχουν προσθέσει, στον ένα ή τον άλλο βαθμό, τη δυνατότητα εκτέλεσης έξυπνων συμβάσεων. Ουσιαστικά, ένα έξυπνο συμβόλαιο είναι μια συναλλαγή στην οποία ο κώδικας προγράμματος τοποθετείται για εκτέλεση. Τα έξυπνα συμβόλαια στο δίκτυο Ethereum εκτελούνται στο EVM (Εικονική μηχανή Ethereum). Για να ξεκινήσει η εκτέλεση ενός έξυπνου συμβολαίου, πρέπει να ξεκινήσει ρητά από άλλη συναλλαγή ή πρέπει να πληρούνται οι προϋποθέσεις για την εκτέλεση. Τα αποτελέσματα της εκτέλεσης του έξυπνου συμβολαίου θα καταγράφονται επίσης στο blockchain. Η λήψη δεδομένων εκτός του blockchain είναι δυνατή, αλλά εξαιρετικά περιορισμένη.

Ποια επιχειρηματική λογική μπορεί να εφαρμοστεί χρησιμοποιώντας ένα έξυπνο συμβόλαιο; Στην πραγματικότητα, δεν υπάρχουν πολλά, για παράδειγμα, έλεγχος των συνθηκών χρησιμοποιώντας δεδομένα από το blockchain, αλλαγή των κατόχων ψηφιακών στοιχείων ανάλογα με αυτές τις συνθήκες, καταγραφή δεδομένων σε μόνιμη αποθήκευση εντός του blockchain. Η λογική υλοποιείται σε ειδική γλώσσα υψηλού επιπέδου Solidity.

Ένα κλασικό παράδειγμα λειτουργικότητας που υλοποιείται με τη χρήση έξυπνων συμβολαίων είναι η έκδοση διακριτικών για ICO. Για παράδειγμα, εφάρμοσα ένα έξυπνο συμβόλαιο για την έκδοση ενός μέτριου AlexToken 500. Με σύνδεσμος στο Etherscan είναι

πηγαίος κώδικας του έξυπνου συμβολαίου στη γλώσσα Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

και τη δυαδική αναπαράσταση όπως τη βλέπει το δίκτυο

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Περισσότερες λεπτομέρειες σχετικά με τα έξυπνα συμβόλαια μπορείτε να βρείτε στο άρθρο: Τι είναι τα έξυπνα συμβόλαια στο Ethereum.

Συμπέρασμα

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

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

Τι επιφυλάσσει το μέλλον για το blockchain; Τώρα μπορούμε μόνο να κάνουμε εικασίες σχετικά με πιθανούς τρόπους για την ανάπτυξη τεχνολογιών blockchain:

  • Το Blockchain θα γίνει η ίδια κοινή τεχνολογία βάσης δεδομένων όπως, για παράδειγμα, η SQL ή η NoSQL για την επίλυση του συγκεκριμένου φάσματος προβλημάτων.
  • Το Blockchain θα γίνει ένα ευρέως διαδεδομένο πρωτόκολλο, όπως το HTTP για το Διαδίκτυο.
  • Το Blockchain θα γίνει η βάση για ένα νέο οικονομικό και πολιτικό σύστημα στον πλανήτη!

Στο επόμενο μέρος θα δούμε τι blockchain υπάρχουν αυτή τη στιγμή και γιατί χρησιμοποιούνται σε διαφορετικούς κλάδους.

Αυτό είναι μόνο η αρχή!

Πηγή: www.habr.com

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