Πώς να οικοδομήσουμε ένα σύστημα παραγωγής αλυσίδας εφοδιασμού αυτοκινήτων χρησιμοποιώντας το Ethereum

Εικόνα από το PIRO4D στο Pixabay

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

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

Το σύστημα χρησιμοποιείται για ένα από τα προβλήματα όπου νομίζω ότι η εφαρμογή blockchain δίνει την υψηλότερη αξία: μια αλυσίδα εφοδιασμού.

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

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

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

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

Επιλογή πλατφόρμας

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

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

Για το demo μας επιλέξαμε το έργο Ethereum. Είναι μια δημοφιλής πλατφόρμα και όλα τα διαθέσιμα εργαλεία ανάπτυξης καθιστούν εύκολη την υλοποίηση των λύσεων.

Η ιστορία κατασκευής

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

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

Επιπλέον, το εργοστάσιο δηλώνει ότι είναι ιδιοκτήτης ενός συγκεκριμένου τμήματος καλώντας μια μέθοδο από το έξυπνο συμβόλαιο "ChangeOwnership", το οποίο θα διατηρήσει τον ιστορικό ιδιοκτήτη για κάθε μέρος και προϊόν.

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

Με αρκετά εξαρτήματα, το εργοστάσιο αυτοκινήτων μπορεί τελικά να αρχίσει να κατασκευάζει αυτοκίνητα. Παρόμοια με ό, τι έκανε το εργοστάσιο ανταλλακτικών για να ενημερώσει τη δουλειά του, το εργοστάσιο αυτοκινήτων χρησιμοποιεί τώρα την έξυπνη σύμβαση "ProductManagement" για να δηλώσει μια συγκεκριμένη συναρμολόγηση αυτοκινήτου. Κάθε αυτοκίνητο έχει ένα σύνολο ιδιοτήτων, όπως έναν αύξοντα αριθμό, και έχει επίσης έναν κατάλογο μερών, που συνδέει τα αυτοκίνητα με συγκεκριμένα μέρη.

Η ιδιοκτησία ελέγχεται από το συμβόλαιο "ChangeOwnership" και έτσι το εργοστάσιο αυτοκινήτων ορίζει την ιδιοκτησία του αυτοκινήτου στον εαυτό του.

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

Η πλήρης ροή προϊόντων μπορεί να δει στην παρακάτω εικόνα:

Αλυσίδα εφοδιασμού αυτοκινήτων

Γνωρίζουμε τι πρέπει να κάνουμε, αλλά πρέπει ακόμα να αγκαλιάσουμε μερικά εργαλεία που θα επιτρέψουν την ανάπτυξη.

Περιβάλλον και εργαλεία

Πρώτον, πρέπει να κάνουμε μια σαφή διάκριση μεταξύ των δικτύων του οικοσυστήματος Ethereum. Το κύριο δίκτυο (που ονομάζεται Mainnet) είναι όπου βρίσκονται οι πραγματικές εφαρμογές και όπου κάθε μονάδα αιθέρα έχει πραγματική αξία.

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

Η χρήση αυτού του δικτύου για την ανάπτυξη διαδηλώσεων φαίνεται να είναι κακή ιδέα, επομένως υπάρχουν και άλλα δίκτυα που είναι καλύτερα για την υποστήριξη της ανάπτυξης. Αυτά τα δίκτυα μπορούν να είναι δημόσια δίκτυα, όπως αυτό που ονομάζεται Rinkeby, ή μπορείτε ακόμη να δημιουργήσετε το δικό σας δίκτυο Ethereum!

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

Το εργαλείο που θα χρησιμοποιήσουμε για να δημιουργήσουμε το δίκτυό μας ονομάζεται Ganache.

Το Ganache είναι ένα απλό εργαλείο που δημιουργεί ένα τοπικό δίκτυο Ethereum και μπορείτε να συνδεθείτε με αυτόν ακριβώς όπως θα κάνατε με το κύριο δίκτυο. Σας παρέχει επίσης 10 λογαριασμούς με 100 αιθέρες κάθε φορά που το εκτελείτε.

Μου αρέσει να ζουν στο τερματικό, οπότε αντί να χρησιμοποιώ το Ganache UI, θα χρησιμοποιήσω το ganache-cli, την έκδοση γραμμής εντολών του Ganache που είναι ένα εργαλείο που βασίζεται στο NodeJS και μπορεί να εγκατασταθεί με npm:

npm εγκατάσταση -g ganache-cli

Για να εκτελέσετε, απλά εκτελέστε το ganache-cli και είστε καλό να πάτε! Όταν τρέχετε το CLI, θα δημιουργήσει ένα μνημονικό για τα πορτοφόλια σας. Το mnemonic είναι μια φράση 12 λέξεων που είναι η ρίζα για τη δημιουργία των ιδιωτικών κλειδιών του λογαριασμού και κατά συνέπεια τα πορτοφόλια.

Η έξοδος είναι σαν την ακόλουθη εικόνα:

Αποθηκεύστε το μνημονικό για να το χρησιμοποιήσετε αργότερα. Κάθε φορά που χρειάζεται να τρέξετε ξανά το Ganache, μπορείτε να διατηρήσετε τους ίδιους λογαριασμούς παρέχοντας το mnemonic με την παράμετρο -m:

ganache-cli-m "τώρα πλαίσιο μισθωτής χρόνια κύβος του φούρνου μικρό όγκο του ρολογιού του ανοσοποιητικού φύλλου"

Σημείωση: τα μνημονικά που δημιουργούνται από το Ganache δεν είναι ασφαλή και δεν πρέπει να χρησιμοποιούνται για πορτοφόλια στο δίκτυο Ethereum

Τώρα που έχουμε το δίκτυό μας πρέπει να είμαστε σε θέση να δοκιμάσουμε και να αναπτύξουμε τις συμβάσεις μας σε αυτό. Αυτό επιτυγχάνεται με ένα άλλο εργαλείο που ονομάζεται Truffle, μέρος της ίδιας ανάπτυξης ως Ganache. Η τρούφα μπορεί επίσης να εγκατασταθεί με npm, έτσι απλά τρέξτε:

npm install -g τρούφα

Θα χρησιμοποιήσουμε την Truffle για να προετοιμάσουμε τη δομή του έργου μας, οπότε εκτελέστε το init τρούφας και ελέγξτε τη δομή του φακέλου που δημιουργείται:

αιθέριο-αλυσίδα εφοδιασμού
| -Συμβαίνει
| - Migrations.sol
| -μεταφορές
| - 1_initial_migration.js
| -στη δοκιμή
truffle-config.js
  • Συμβάσεις: περιέχει τον κώδικα για τις έξυπνες συμβάσεις μας
  • Μεταναστεύσεις: περιέχει τις οδηγίες ανάπτυξης στις συμβάσεις μας
  • Δοκιμή: περιέχει τις δοκιμές για τις συμβάσεις
  • Το Truffle-config.js (ή το truffle.js ανάλογα με το O.S. σας): το κύριο αρχείο διαμόρφωσης, δείχνει τα δίκτυα Ethereum που μπορούμε να αναπτύξουμε

Το αρχείο διαμόρφωσης έρχεται με πολύ περιεχόμενο, αλλά το μεγαλύτερο μέρος σχολιάζεται. Για να προσθέσετε το τοπικό μας δίκτυο στις επιλογές ανάπτυξης, απλώς αποσυνδέστε το παρακάτω μέρος (γραμμές 49-53):

Τέλος, πρέπει να παρέχουμε μια διασύνδεση στους χρήστες μας για να τους επιτρέψουμε να αλληλεπιδρούν με τα δίκτυα της Ethereum.

Μία από τις επιλογές για αυτό είναι να εγκαταστήσετε το Metamask, ένα plugin για προγράμματα περιήγησης που διαχειρίζεται τα πορτοφόλια και επίσης επιτρέπει στα συστήματα ιστού να μιλούν με τα δίκτυα του Ethereum.

Μόλις εγκατασταθεί, η Metamask παρέχει μια διασύνδεση για τον έλεγχο των κεφαλαίων πορτοφολιού σε διαφορετικά δίκτυα. Κάθε φορά που ένα σύστημα ιστού απαιτεί μια ενέργεια που περιλαμβάνει πληρωμή, η Metamask ζητά την έγκριση του χρήστη.

Για να το εγκαταστήσετε, απλώς πηγαίνετε στον ιστότοπό του και επιλέξτε την επέκταση στο πρόγραμμα περιήγησής σας.

Μετά την εγκατάσταση, το Metamask πρέπει να δημιουργήσει ή να εισαγάγει ένα πορτοφόλι, οπότε επιλέξτε "εισαγωγή με φράση σπόρων" και επικολλήστε το μνημονικό που πήρατε από το ganache-cli.

Σημείωση: Το Metamask είναι προς το παρόν σε έκδοση beta, οπότε το έχετε υπόψη σας κάθε φορά που το χρησιμοποιείτε και ακολουθείτε τις οδηγίες που δίνονται μετά τη διαμόρφωση

Και αυτό είναι όλο που χρειαζόμαστε τώρα, ας πηδήξουμε στον κώδικα!

Έξυπνα συμβόλαια χέρια ενεργοποιημένα

Το πρώτο πράγμα που πρέπει να κάνουμε είναι να εφαρμόσουμε τη λογική πίσω από κάθε έξυπνο συμβόλαιο, οπότε ξεκινάμε με το "ProductManagement".

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

  • Καταχώρηση μερών: Δημιουργήστε μια χαρτογράφηση δεδομένων των στοιχείων του ίδιου του τμήματος (τύπος, σειριακός αριθμός και ημερομηνία κατασκευής), το εργοστάσιο που το έφτιαξε (αναγνωριστικό εργοστασίου) και ο τρέχων κάτοχος (id ιδιοκτήτη).
  • Καταχώριση προϊόντος: δημιουργήστε μια αντιστοίχιση με την ίδια καταχώριση μέρους καθώς και την ταυτότητα κάθε τμήματος που υπάρχει στο προϊόν.
  • Getters για τις αντιστοιχίσεις ώστε να μπορέσουμε να ελέγξουμε την ύπαρξη εξαρτημάτων και προϊόντων και να πάρουμε τα στοιχεία τους.

Ο συμβατικός κώδικας που πρέπει να εφαρμόσουμε είναι:

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

Η μέθοδος buildPart είναι απλή: χρησιμοποιεί μια συνάρτηση helper για να συγκολλήσει τη διεύθυνση του αποστολέα και πληροφορίες μέρους σε μια array bytes και να υπολογίσει ένα hash. Αυτός ο κατακερματισμός είναι το κλειδί που χρησιμοποιείται κατά την εγγραφή και στη συνέχεια την ερώτηση των δεδομένων, οπότε το επιστρέφουμε στην ανάπτυξη βοήθειας.

Εφόσον οι συναλλαγές του Ethereum δεν επικυρώνονται και εκτελούνται όταν καλείτε το έξυπνο συμβόλαιο, λαμβάνουμε ένα hash συναλλαγής και δεν μπορούμε να το χρησιμοποιήσουμε για την εφαρμογή μας web, αλλά μπορούμε να εκδώσουμε μια κλήση αντί μιας συναλλαγής για να ελέγξουμε εύκολα τα αποτελέσματα.

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

Δεν θα καλύψουμε τον κώδικα δοκιμής έτσι ώστε να μην επεκτείνουμε το άρθρο, αλλά να το ελέγξουμε στον αποθετήριο μας!

Η μέθοδος buildProduct είναι απλώς μια επέκταση της μεθόδου buildPart, προσθέτοντας έναν απλό έλεγχο για να εγγυηθεί ότι όλα τα μέρη καταχωρήθηκαν πριν επιχειρήσουν να δημιουργήσουν το προϊόν.

Δύο πράγματα είναι πραγματικά αξίζει να σημειωθεί για τον κώδικα:

  • Η σταθερότητα δημιουργεί αυτόματα τους getters για δημόσιες αντιστοιχίσεις, οπότε δεν χρειάζεται να ανησυχούμε για αυτό!
  • Αλλά πρέπει να ανησυχούμε όταν επιστρέψουμε τιμές συστοιχιών, ακριβώς στην περίπτωση των τμημάτων του προϊόντος μας. Έχουμε δημιουργήσει μια λειτουργία "getParts" για την αντιμετώπιση αυτής της ανάγκης.

Συνεχίζοντας την ανάπτυξή μας, θα κωδικοποιήσουμε τη σύμβαση "ChangeOwnership". Έχει έναν απλό σκοπό: να διαχειρίζεται το μέρος και τη μεταφορά προϊόντων μεταξύ των ενδιαφερομένων.

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

Απλά πρέπει να λάβουμε μια παράμετρο για να μας πείτε αν θέλουμε να καταχωρήσουμε εξαρτήματα ή προϊόντα για να μάθουμε ποια χαρτογράφηση θα ελέγξει τη σύμβαση "Διαχείριση Προϊόντων" και επίσης πού θα αποθηκεύσει τον τρέχοντα κάτοχο του στοιχείου. Ο κώδικας είναι ο ακόλουθος:

Χρησιμοποιούμε μια παράμετρο "ProductManagement" για να αναζητήσουμε εξαρτήματα και προϊόντα κάθε φορά που προσπαθούμε να αλληλεπιδράσουμε μαζί τους. Αυτό υπογραμμίζει μια σημαντική πτυχή των έξυπνων συμβάσεων: μπορείτε να τα χρησιμοποιήσετε για να καλέσετε άλλα έξυπνα συμβόλαια! Μια επιλογή για να γίνει αυτό είναι να δηλώσει το συμβόλαιο ABI στην αρχή του αρχείου της σύμβασης, αλλά μόνο τα μέρη που απαιτούνται από τη σύμβασή σας. Στην περίπτωσή μας σημαίνει:

Για να επισημάνουμε τη σωστή σύμβαση, απλά πρέπει να περάσουμε τη διεύθυνση της σύμβασης όταν την δημιουργούμε, όπως αυτή:

pm = Διαχείριση Προϊόντων (prod_contract_add).

Συνεχίζοντας την αναθεώρηση κώδικα "ChangeOwnership", μπορούμε επίσης να δούμε ότι ορίσαμε δύο γεγονότα, το TransferPartOwnership και το TransferProductOwnership. Τα γεγονότα μπορούν να καταγραφούν με συναλλαγές, έτσι ώστε να αποτελέσουν τον πυρήνα της λειτουργικότητας "παρακολούθησης".

Όταν ένα μέρος ή ένα προϊόν μεταφέρεται με επιτυχία σε άλλο λογαριασμό, θα εκπέμψουμε ένα συμβάν.

Πάρτε τη λειτουργία addOwnership ως παράδειγμα: επαληθεύουμε ότι το στοιχείο υπάρχει, ελέγξτε αν εξακολουθεί να είναι μη καταχωρημένο και ότι ο κατασκευαστής είναι αυτός που ζητά την ιδιοκτησία. Εάν επαληθεύσουμε όλα αυτά, αποθηκεύουμε στη συνέχεια τον κατασκευαστή ως ιδιοκτήτη του τμήματος και καταγράψουμε αυτό στο Ethereum ως γεγονός. Αργότερα, μπορούμε να διερευνήσουμε γεγονότα σχετικά με αυτό το μέρος από το hash του και να δούμε όλες τις μεταφορές.

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

Ανάπτυξη Συμβολαίου

Για να μεταφέρουμε τις συμβάσεις μας στο Ethereum, πρέπει να δημιουργήσουμε ένα απλό αρχείο ανάπτυξης στο φάκελο "αναπτύξεις". Μπορούμε να στηρίξουμε το αρχείο "1_initial_migration.js" που δημιουργήθηκε από την Truffle, οπότε ο κώδικας μας γίνεται:

Μπορούμε τελικά να αναπτύξουμε τον κώδικα μας στο τοπικό μας δίκτυο Ethereum εκτελώντας:

μετανάστευση τρούφας - ανάπτυξη δικτύων

Κατά την εκτέλεση, πιθανότατα θα σημειώσετε ότι το τερματικό ganache-cli εκπέμπει πολλά μηνύματα, συμπεριλαμβανομένων ορισμένων:

Συναλλαγή: 0x9fe6d2ece9cdca2f12b574ead7abb7bea7feab316f5cd6ebbd5b713e76850a1d
Συμβόλαιο δημιουργήθηκε: 0xb6a3c3cf9d1e27e43e5fb12e505d79764748edbe

Αυτά αντιπροσωπεύουν τις συμβεβλημένες διευθύνσεις μας, γι 'αυτό αποθηκεύστε τις για να μπορέσετε να επικοινωνήσετε αργότερα. Θα χρειαστούμε αυτή τη διεύθυνση στο web interface μας!

Διασύνδεση Web Χέρια ενεργοποιημένα

Το σύστημά μας έχει τώρα έτοιμες έξι έξυπνες συμβάσεις και το μόνο που χρειαζόμαστε είναι η διασύνδεση για τη χρήση τους.

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

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

Διασύνδεση κατασκευής εξαρτημάτων

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

Διασύνδεση κατασκευής αυτοκινήτων

Η τελική άποψη είναι από τους αντιπροσώπους και το παράδειγμα μας είναι το πιο απλό: μπορούμε απλώς να ελέγξουμε τα αυτοκίνητα και τα μέρη για την ιστορία του ιδιοκτήτη. Ελέγξτε την παρακάτω εικόνα για λεπτομέρειες:

Προβολή αντιπροσώπου με ιστορικό ιδιοκτήτη για αυτοκίνητα και ανταλλακτικά

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

  • Τοποθεσία δικτύου
  • Συμβόλαιο ABI (έξυπνος ορισμός συμβολαίου)
  • Διεύθυνση συμβολαίου
  • Πορτοφόλι που θα χρησιμοποιηθεί για πράξεις

Από προεπιλογή, το ganache-cli εκτελεί το δίκτυο στη θύρα 8545 και το ABI παράγεται κάθε φορά που καταρτίζετε και αναπτύσσετε τα συμβόλαιά σας (αλλά μόνο όταν ενημερώνουμε τον κώδικα, οπότε δεν χρειάζεται να το αλλάξουμε).

Αν χρειαστεί ποτέ, λάβετε την τιμή που είναι αποθηκευμένη στο φάκελο "build" της εγκατάστασης.
Η διεύθυνση της σύμβασης που πρέπει να καθορίσετε με τις τιμές που αποθηκεύσατε πριν, αλλάξτε τις παρακάτω γραμμές στις τιμές σας:

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

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

Το αντικείμενο "window.co" είναι το συμβόλαιο "ChangeOwnership" και τόσο το currentPartOwner όσο και το addOwnership είναι μέθοδοι που παρέχει.
Η διαφορά εδώ είναι σχετικά με τη λειτουργία που χρησιμοποιείται για την κλήση τους: κλήση έναντι αποστολής.
Το Web3 1.0 απαιτεί να καθορίσετε τον τύπο αλληλεπίδρασης που θέλετε να κάνετε με το blockchain: reads ή συναλλαγές.

Έτσι κάθε φορά που χρησιμοποιείτε μια μέθοδο με "κλήση" διαβάζετε μόνο τα δεδομένα από το blockchain, δεν σας κοστίζει κανένα αιθέρα και επίσης δεν αλλάζει την κατάσταση της αλυσίδας.

Από την άλλη πλευρά, αν χρησιμοποιείτε "αποστολή" πρέπει να στείλετε αέριο για να εκτελέσετε τη λειτουργία και δημιουργεί μια συναλλαγή. Όπως έχουμε πει πριν, οι συναλλαγές δεν εξορύσσονται αμέσως, γι 'αυτό λάβετε υπόψη αυτό κατά την ανάπτυξη πραγματικών Dapps.

Τέλος, το δεύτερο μέρος που πρέπει να επισημανθεί είναι:

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

Αυτό σημαίνει ότι μπορούμε να έχουμε όλα όσα συνέβησαν με ένα μόνο μέρος και αν θέλουμε μπορούμε επίσης να λάβουμε τα στοιχεία του τμήματος χρησιμοποιώντας το ίδιο hash και καλώντας "parts" από το "ProductManagement".

Αρκετά δροσερό, ε;

Τυλίγοντας

Και τελειώσαμε!

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

Έχουμε ένα διαφανές ρεκόρ που επιτρέπει στους κατασκευαστές, τους αντιπροσώπους και τους αγοραστές να έχουν τις ίδιες πληροφορίες σχετικά με τα προϊόντα.

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

Το ίδιο ισχύει και προς την αντίθετη κατεύθυνση: οι αντιπρόσωποι και οι αγοραστές μπορούν να ανιχνεύσουν τα μέρη των προϊόντων τους στα εργοστάσια σε περίπτωση που αντιμετωπίσουν προβλήματα ή χρειάζονται αντικαταστάσεις.

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

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

Ελπίζω να το διασκέδασες!