Τι θα χρειαστείτε:
- ένα υπόβαθρο της επιστήμης των υπολογιστών
- τα βασικά του Ethereum
- τα βασικά του λογισμού (βελτιστοποίηση περιορισμών)
Τι θα λάβετε:
- τα βασικά SNARKs μηδενικής γνώσης
- τα βασικά των δέντρων Merkle
- πώς η Ethereum θα μπορούσε να κλιμακωθεί σε χιλιάδες συναλλαγές ανά δευτερόλεπτο χάρη στα SNARKs
Τα SNARKs επιτρέπουν σε έναν Παροχέα να αποδείξει σε έναν Επαληθευτή ότι έχει μια λύση W στο πρόβλημα F με κοινές / γνωστές εισόδους X, χωρίς να αποκαλύψει W.
Η εξεύρεση λύσης στο πρόβλημα θα μπορούσε να απαιτήσει τεράστια υπολογιστική ισχύ και μνήμη.
Έτσι, ο Επαληθευτής μπορεί βασικά να είναι 100% σίγουρος ότι το Prover έχει λειτουργήσει σωστά (και βρήκε μια λύση), χωρίς να κάνει ξανά τη δουλειά από μόνη της για να ελέγξει τη λύση ούτε να γνωρίζει καθόλου τη λύση. Είναι μαγικό!
Η διαδικασία έχει 3 βήματα:
- ΡΥΘΜΙΣΗ - Το πρόβλημα F (που πρέπει να εκφραστεί ως τετραγωνικό αριθμητικό πρόγραμμα, βλ. Παρακάτω) προετοιμάζεται για SNARKs. Αυτή η διαδικασία έχει πολύ υψηλή μνήμη και ένταση υπολογιστών ανάλογα με την πολυπλοκότητα του προβλήματος (→ Ο αριθμός εισόδων και περιορισμών → Η διάσταση της μήτρας του προβλήματος ικανοποίησης περιορισμών). Ο παίκτης που κάνει το πρόγραμμα εγκατάστασης (θα μπορούσε να είναι ο ίδιος ο επαληθευτής) πρέπει να είναι αξιόπιστος από όλα τα μέρη, καθώς η έξοδος του προγράμματος εγκατάστασης χρησιμοποιείται στις επόμενες φάσεις. Η εγκατάσταση γίνεται συνήθως χρησιμοποιώντας libsnark, μια βιβλιοθήκη C ++ που είναι η πιο δημοφιλής εφαρμογή για zkSNARKs.
- ΠΑΡΟΧΗ - Το Prover, που έχει μια λύση W για το πρόβλημα F με κοινές εισόδους X (ίσως ξόδεψε τεράστια ποσά CPU και μνήμης για να το βρει!), Χρησιμοποιεί libsnark και η έξοδος του Ρύθμιση φάση για να δημιουργήσετε μια απόδειξη 𝚷. Αυτή η διαδικασία είναι σίγουρα υψηλής έντασης μνήμης και υπολογιστών (ανάλογα με την πολυπλοκότητα του προβλήματος, όπως παραπάνω). Το μέγεθος της εξόδου (π.χ. απόδειξη 𝚷) είναι αντίθετο και σταθερό ανεξάρτητα από την πολυπλοκότητα του προβλήματος. Το Prover πρέπει να εμπιστευτεί ποιος έχει κάνει τη φάση Setup, καθώς χρησιμοποιεί την έξοδο του…
- ΕΠΑΛΗΘΕΥΣΗ - Ένας επαληθευτής - δίνει ως είσοδο την έξοδο της φάσης εγκατάστασης, κοινόχρηστες εισόδους X και απόδειξη 𝚷 - ελέγχει την απόδειξη. Εάν η επαλήθευση είναι επιτυχής, το Prover κατάφερε να αποδείξει σε έναν Επαληθευτή ότι βρήκε τη λύση W στο πρόβλημα F… χωρίς να αποκαλύψει W! Το ωραίο είναι ότι όχι μόνο η απόδειξη είναι συνοπτική και έχει πάντα το ίδιο μήκος .., η διαδικασία επαλήθευσης είναι γρήγορη και καθόλου εντατική στη μνήμη / τον υπολογιστή. Σε αντίθεση με τις δύο προηγούμενες φάσεις… η επαλήθευση μπορεί να γίνει εύκολα με ένα smartphone σε χιλιοστά του δευτερολέπτου!
Μια καλή ανακεφαλαίωση (πηγή):
Πώς μπορεί να συμβεί αυτό; Λοιπόν, είναι η μαγεία του Μέρλιν! Αν θέλετε να αποκτήσετε τα μαθηματικά πίσω από αυτό, ξεκινήστε από εδώ.
Πώς μπορώ να μετατρέψω το λογισμικό μου σε ένα τετραγωνικό αριθμητικό πρόγραμμα;
Όπως αναφέρθηκε παραπάνω, το πρόβλημα F της φάσης εγκατάστασης πρέπει να είναι ένα τετραγωνικό αριθμητικό πρόγραμμα. Οι κανόνες του παιχνιδιού είναι σκληροί:
- Οι εισόδους του λογισμικού σας πρέπει να είναι αριθμοί. Μετατρέψτε τα πράγματά σας (πίνακες, χορδές, κ.λπ.) σε αριθμούς. Αυτό είναι ασήμαντο.
- Ένα «τετραγωνικά περιορισμένο σύστημα εξισώσεων» σημαίνει:
όπου x είναι το ν-διαστατικό διάνυσμα των εισόδων σας, m είναι ο αριθμός των περιορισμών (δηλ. ο αριθμός των εξισώσεων του συστήματός σας), C είναι οι συντελεστές n-by-n Matrix και q είναι ένας διαστατικός διάνυσμα συντελεστών n. Εάν δεν σας αρέσουν οι πίνακες και τα διανύσματα, εδώ είναι η περίπτωση n = 3 και m = 2 (3 είσοδοι, 2 περιορισμοί):
- Η εφαρμογή είναι ένα αριθμητικό κύκλωμα, που σημαίνει ότι το αποτέλεσμα είναι Το πρόβλημα λύθηκε (το σύστημα έχει λυθεί, δηλαδή όλα τα πολυώνυμα είναι ίσο με 0) ή Το πρόβλημα δεν επιλύθηκε (όλες οι άλλες περιπτώσεις). Με άλλα λόγια: «αυτές οι εισόδους είναι / δεν είναι μία από τις λύσεις σε αυτό το πρόβλημα».
- Οι συντελεστές C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 είναι οι περιορισμοί του συστήματος. Αυτό είναι βασικά αυτό που καθορίζει το λογισμικό σας. Αλλάξτε τα… και θα λάβετε άλλο λογισμικό! Επιστροφή στον τρόπο λειτουργίας των SNARK: C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 είναι η είσοδος της φάσης εγκατάστασης. Η έξοδος της φάσης εγκατάστασης (που χρειάζεστε για την παροχή και την επαλήθευση) σχετίζεται επομένως αυστηρά με εκείνα τα C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 και λειτουργεί μόνο για αυτό το Πρόβλημα. Εάν τα αλλάξετε ορίζετε ένα άλλο λογισμικό / πρόβλημα και πρέπει να εκτελέσετε ξανά τη φάση εγκατάστασης! x₁, x₂,…, x𝗇 είναι οι μεταβλητές (δηλαδή τι πρέπει να μαντέψετε για να πάρετε μια λύση του συστήματος). Έτσι, όταν λέμε "Αγαπητέ Prover, μπορείτε παρακαλώ να βρείτε μια μυστική λύση W για το πρόβλημα F με κοινόχρηστες / δημόσιες εισόδους X" εννοούμε για παράδειγμα "Αγαπητέ Prover, μπορείτε να βρείτε τις τιμές x₁, x₂, ..., x𝗇 που λύνουν το σύστημα με, για παράδειγμα, x₇ = 2393, x₅₂₆ = 5647; " Μπορείτε να κάνετε ό, τι θέλετε με όλα τα x𝗇, εκτός από τα x₇ και x₅₂₆, τα οποία περιορίζονται στις κοινόχρηστες / δημόσιες εισόδους.
Είναι μια δύσκολη ζωή, αλλά μπορείτε να επιβιώσετε ... Εάν χρειάζεστε βρόχους μπορείτε να τους ξεδιπλώσετε επαναλαμβάνοντας την ίδια λειτουργία πολλές φορές. Ή εάν χρειάζεστε για παράδειγμα x₁⁴ x₂⁵, ορίζετε μια νέα είσοδο x₃ = x₁⁴ x₂⁵ και χρησιμοποιείτε το x₃ στους περιορισμούς σας. Έχει να κάνει με την προσθήκη μεταβλητών και περιορισμών… Ακόμα και για αρκετά απλά λογισμικά, είναι εύκολο να φτάσετε εκατοντάδες εκατομμύρια ή δισεκατομμύρια εισόδους και περιορισμούς!
Θέλετε να μάθετε περισσότερα; Ανάγνωση εδώ. Και επίσης δείτε αυτό το βασικό code_to_r1cs.py από αιθέριο / έρευνα.
Τι είναι ένα δέντρο Merkle;
Μια συνάρτηση κατακερματισμού είναι ένας κανόνας που αντιστοιχεί μια εισαγωγή αυθαίρετου μεγέθους σε μια έξοδο σταθερού μεγέθους. Θα μπορούσαμε να εφεύρουμε μια αρκετά άχρηστη συνάρτηση κατακερματισμού «Συνδυάστε τα πρώτα δύο με τα δύο τελευταία γράμματα» που μετατρέπει το «Woody Allen» σε «Woen» και «Paul McCartney» σε «Paey».
Ένα δέντρο Merkle είναι μια δομή δεδομένων όπου κάθε γονέας είναι ο κατακερματισμός των δύο γιων του. Στην κορυφή θα βρείτε το Root, το οποίο είναι το hash των δύο γιων του επιπέδου 1. Στο κάτω μέρος, κάθε φύλλο είναι το hash μιας εξωτερικής εισόδου.
Χρησιμοποιώντας τη λειτουργία κατακερματισμού "Woody Allen" → "Woen":
Όταν αλλάζει ένα φύλλο, η τροποποίηση διαδίδεται μέχρι το Root. Εάν το ANTHONY αλλάξει, αλλάζουν επίσης ANNY (φύλλα), CENY και CECO (Root). Όποιο φύλλο αλλάξει, η Ρίζα αλλάζει επίσης.
Δεν χρειάζεστε ολόκληρο το δέντρο για να υπολογίσετε ξανά το Root. Στο παράδειγμά μας, αν αλλάξει το ANTHONY και γνωρίζετε τόσο το JACO όσο και το CECILY, μπορείτε εύκολα να υπολογίσετε ξανά το Root ακόμα κι αν αγνοήσετε εντελώς τα JAMES, MARCO, JAES και MACO. Για τεράστια δέντρα αυτό εξοικονομεί πολύ χρόνο!
Και τι έγινε;
Τα δέντρα Merkle είναι ιδανικά για ελέγχους ακεραιότητας δεδομένων. Συνήθως: γνωρίζετε ποια είναι η έγκυρη ρίζα και ελέγχετε ότι τα ληφθέντα δεδομένα ταιριάζουν με εκείνη της ρίζας. Για παράδειγμα: ένα αξιόπιστο συμβαλλόμενο μέρος που δεν μπορεί να σας δώσει ολόκληρο το σύνολο δεδομένων των πρώτων ονομάτων ανθρώπων στη Γη (χωρίς χρόνο, χωρίς εύρος ζώνης ή ίσως δεν έχει καθόλου τα δεδομένα) σας δίνει μόνο το Root (π.χ. "CECO"). Afterwords: λαμβάνετε εκατομμύρια ονόματα, με αναφορά στον αριθμό φύλλων, από χιλιάδες μη αξιόπιστα μέρη. Λοιπόν, αφού έχετε το σωστό Root, μπορείτε να ελέγξετε σε ποιον μπορείτε να βασιστείτε, ποιος σας δίνει ψεύτικα δεδομένα…
Τα δέντρα Merkle είναι επίσης μέρος της ζωής σας! Όταν κατεβάζετε ένα αρχείο Torrent 3 GB, το αρχείο σας χωρίζεται σε εκατομμύρια μικρά κομμάτια. Το κατακερματισμό κάθε κομματιού αποθηκεύεται σε ένα φύλλο. Εφόσον γνωρίζετε ποια είναι η έγκυρη ρίζα του δέντρου, κάθε φορά που λαμβάνετε ένα κομμάτι του αρχείου από κάποιον, μπορείτε να ελέγξετε αν είναι σωστό. Εάν δεν είναι, μπορείτε να ρωτήσετε το ίδιο κομμάτι σε κάποιον άλλο.
Μπορείτε να το κάνετε αυτό ακόμη και αν δεν έχετε κατεβάσει ακόμη ολόκληρο το δέντρο / όλα τα φύλλα: εάν γνωρίζετε ότι το Root είναι CECO και εμπιστεύεστε το JACO… όταν λαμβάνετε το κομμάτι ANTHONY, μπορείτε να το επαληθεύσετε ακόμα και αν δεν το έχετε κατεβάσει όμως τα κομμάτια MARCO και JAMES.
Γιατί τα δέντρα Merkle είναι χρήσιμα στην τεχνολογία κατανεμημένου καθολικού είναι απλή: χρησιμοποιείτε πρωτόκολλα συναίνεσης (αργά, ακριβά) μόνο για την επίτευξη συναίνεσης στο Root Στη συνέχεια, οι μη αξιόπιστοι κόμβοι του δικτύου μπορούν να μοιράζονται αποτελεσματικά και άμεσα δεδομένα… και να κοιμούνται ασφαλείς και υγιείς χάρη στους ελέγχους ακεραιότητας με το Root.
Όταν ο Θεός ζήτησε από την Ethereum να επιλέξει 2 υπερδυνάμεις μεταξύ της Ασφάλειας, της Επεκτασιμότητας και της Αποκέντρωσης… Η Ethereum θυσιάστηκε την Επεκτασιμότητα. Στην πραγματικότητα δεν υπάρχει ισχυρό όριο στις "συναλλαγές ανά δευτερόλεπτο": το ανώτατο όριο αφορά την ποσότητα αερίου κάθε μπλοκ - δηλαδή, απλοποιώντας, το ποσό των λειτουργιών που μπορώ να κάνω σε κάθε μπλοκ. Αυτό το όριο είναι 8 εκατομμύρια αέριο. Αυτό θα μπορούσε να σημαίνει πολλές «μικροσκοπικές» συναλλαγές (δεν υπάρχουν δεδομένα που συνδέονται με τις συναλλαγές, καμία ενέργεια που πρέπει να εκτελεστεί σε αυτά τα δεδομένα) ή λίγες μεγάλες συναλλαγές. Εξαρτάται από τους κόμβους της Ethereum, οι οποίοι υποβάλλουν συναλλαγές και στους ανθρακωρύχους της Ethereum, οι οποίοι περιλαμβάνουν στο μπλοκ τις συναλλαγές που πληρώνουν περισσότερα.
Ένα μπλοκ εξορύσσεται κάθε ~ 15 δευτερόλεπτα. Αυτό σημαίνει ~ 32 εκατομμύρια αέριο ανά λεπτό, κάτι που σίγουρα δεν αρκεί αν θέλουμε τα dapps του Ethereum να είναι mainstream.
Παρεμπιπτόντως: σταματήστε με αυτές τις κουραστικές συγκρίσεις μεταξύ Ethereum και Visa. Ένα κεντρικό σύστημα θα πάντοτε γίνετε γρηγορότεροι από το Ethereum… από το σχεδιασμό! Κάνουν διαφορετικά πράγματα και τα χρειάζεστε σε διαφορετικές καταστάσεις. Εάν δεν χρειάζεστε αποκέντρωση και περιβάλλον χωρίς εμπιστοσύνη… φυσικά θα πρέπει να επιλέξετε Visa. Εν συντομία: το γεγονός ότι το μπλέντερ περιστρέφεται γρηγορότερα από το πλυντήριο σας δεν σημαίνει ότι θα καθαρίσετε το παντελόνι σας σε ένα μπλέντερ!
Ας βάλουμε μαζί το παζλ! Φανταστείτε ότι θα μπορούσατε να «συμπιέσετε» πολλές μικροσκοπικές συναλλαγές σε μια μεγάλη συναλλαγή χάρη στα SNARKs. Εάν το αέριο που δαπανάται από αυτήν τη μεγάλη συναλλαγή είναι μικρότερο από το άθροισμα του αερίου που δαπανάται από τις μικρές συναλλαγές, αυτό σημαίνει ότι εξοικονομείτε αέριο.
Και εξοικονόμηση αερίου σημαίνει:
- Οι χρήστες ξοδεύουν λιγότερα για συναλλαγές συνολικά → Αυτό θα ήταν μια ώθηση για ολόκληρο το οικοσύστημα
- Να μπορείτε να βάλετε περισσότερα πράγματα σε ένα μπλοκ → Το Ethereum περιστρέφεται πιο γρήγορα από το μπλέντερ σας!
Πώς λειτουργεί;
Υπάρχουν χρήστες, ένας αναμεταδότης (ή περισσότεροι αναμεταδότες) που συγκεντρώνουν συναλλαγές και ένα έξυπνο συμβόλαιο.
- Οι χρήστες που επιθυμούν να παίξουν αυτό το παιχνίδι στέλνουν το Ether (ή τα κουπόνια) σε ένα έξυπνο συμβόλαιο που έχει ελεγχθεί δημόσια. Για κάθε νέο παίκτη δημιουργείται ένα νέο φύλλο σε ένα δέντρο Merkle. Το φύλλο περιλαμβάνει πληροφορίες σχετικά με τον ιδιοκτήτη του Ether (τη διεύθυνσή του, που είναι επίσης το δημόσιο κλειδί), το ποσό του Ether και το nonce (ο μετρητής συναλλαγών αυτού του λογαριασμού, που είναι 0 όταν προστίθεται το φύλλο)
- Όταν ο Α θέλει να στείλει τον Ether στο B (και οι δύο πρέπει να έχουν ένα φύλλο / λογαριασμό στο έξυπνο συμβόλαιο), ο Α συσκευάζει μια συναλλαγή, η οποία περιλαμβάνει τη διεύθυνση του απόλογαριασμός, το προς την λογαριασμός, το πρεσβευτής του παπά του λογαριασμού από, το ποσό του Αιθέρα προς μεταφορά και το υπογραφή της συναλλαγής (προφανώς υπογεγραμμένη με το ιδιωτικό κλειδί του λογαριασμού «από»). Στη συνέχεια στέλνει τη συσκευασμένη συναλλαγή στον αναμεταδότη.
- Ο αναμετάδοσης συγκεντρώνει όλες τις συναλλαγές που λαμβάνονται σε ένα δεδομένο χρονικό παράθυρο (π.χ. μία ώρα), ενημερώνει το δέντρο Merkle με τα ποσά των νέων υπολοίπων και δημιουργεί μια απόδειξη SNARK που αποδεικνύει ότι όλες οι υπογραφές και η ρίζα του νέου δέντρου Merkle είναι έγκυρες. Ο αναμεταδότης στέλνει τελικά τη νέα κατάσταση και την απόδειξη στο έξυπνο συμβόλαιο.
- Η έξυπνη σύμβαση επικυρώνει το Proof on-chain. Εάν είναι έγκυρο, αποθηκεύει τη ρίζα Merkle του νέου κράτους στην εσωτερική μνήμη του συμβολαίου.
Βασικά, η ρίζα Merkle tree απεικονίζει ολόκληρη την κατάσταση όλων των λογαριασμών. Και δεν μπορείτε να το αλλάξετε (= κλέψτε χρήματα) εκτός εάν μπορείτε να αποδείξετε την εγκυρότητα των υπογραφών των οποίων οι συναλλαγές οδηγούν στη Νέα κατάσταση που συνοψίζεται από τη νέα ρίζα που υποβάλλετε.
Με λίγα λόγια: οι χρήστες έχουν εξαιρετικά γρήγορες και σχεδόν δωρεάν συναλλαγές, όπως στο Coinbase, χωρίς να χρειάζεται να εμπιστεύονται τον αναμεταδότη, ο οποίος δεν μπορεί να κάνει τίποτα, σε αντίθεση με το Coinbase, χωρίς την υπογραφή σας.
Είναι μια μη στερητική πλευρική αλυσίδα της οποίας η κατάσταση συνοψίζεται από μια ρίζα Merkle.
Ας συνδέσουμε αυτά που μάθαμε παραπάνω για τα SNARK με αυτό που μόλις συζητήσαμε για την κλιμάκωση. Υπάρχουν διαφορετικοί τρόποι για να το κάνετε αυτό. Θα συγκρίνω 2 συνταγές: Vitalik's εκδοχή και barryWhiteHat's εκδοχή.
Το SETUP γίνεται από…
Ο τύπος που ξεκινά το έργο, ο οποίος δημιουργεί επίσης το έξυπνο συμβόλαιο. Όσο πιο ελεγχόμενο είναι, τόσο καλύτερο. Πρέπει να τον εμπιστευτείτε… είναι αξιόπιστη εγκατάσταση!
Το έξυπνο συμβόλαιο εξοικονομεί…
2 ρίζες Merkle (τιμές bytes32): το πρώτο δέντρο περιέχει διευθύνσεις λογαριασμών (δημόσιες υπογραφές), τα υπόλοιπα λογαριασμών και μη
Το PROVING γίνεται από…
Ο αναμεταδότης
Ο αναμεταδότης στέλνει στο έξυπνο συμβόλαιο…
- οι 2 ρίζες Merkle της νέας πολιτείας (δένδρο διευθύνσεων και ισορροπίες + δέντρο nonces)
- τη λίστα συναλλαγών, χωρίς υπογραφές. «Κάθε συναλλαγή κοστίζει 68 αέριο ανά byte. Ως εκ τούτου, για μια τακτική μεταφορά, μπορούμε να περιμένουμε το οριακό κόστος να είναι 68 * 3 (από) + 68 * 3 (έως) + 68 * 1 (χρέωση) + 68 * 4 + 4 * 2 (ποσό) + 68 * 2 (nonce), ή 892 αέριο "
Οι γνωστές είσοδοι της PROVING είναι…
- οι 2 ρίζες της παλιάς πολιτείας Merkle
- οι 2 ρίζες της νέας πολιτείας Merkle
- λίστα συναλλαγών
Η διαδικασία ΠΑΡΟΧΗΣ αποδεικνύει ότι…
Δεδομένου
- οι 2 ρίζες Merkle Old State (ήδη αποθηκευμένες στη σύμβαση)
- οι 2 ρίζες της νέας πολιτείας Merkle (αποστέλλονται στην επιθετική συναλλαγή)
- τη λίστα συναλλαγών (αποστέλλεται στη συναλλαγή agr.)
… Ο αναμεταδότης έχει έγκυρες υπογραφές για μετακίνηση από κατάσταση με 2 παλιές ρίζες σε κατάσταση με 2 νέες ρίζες με αυτές τις συναλλαγές.
Η ΕΠΑΛΗΘΕΥΣΗ γίνεται από…
Το έξυπνο συμβόλαιο (κωδικοποιείται σε σταθερότητα, vyper, όπως θέλετε!)
Οι γνωστές εισόδους της διαδικασίας επαλήθευσης είναι…
Η διαδικασία του ίδιου PROVING είναι γνωστές εισροές, σαφώς…!
Όρια στην επεκτασιμότητα
Κάθε συγκεντρωτική συναλλαγή χρησιμοποιεί αέριο 650k για επαλήθευση SNARK (σταθερό κόστος) συν ~ 900 αέρια οριακό κόστος ανά συναλλαγή (κοστίζει η αποστολή δεδομένων!). Έτσι, χρησιμοποιώντας ολόκληρο το μπλοκ, το relayer μπορεί να συγκεντρωθεί το πολύ:
που σημαίνει ~ 544 tx ανά δευτερόλεπτο
barryWhiteHat's εκδοχή
Το SETUP γίνεται από…
Ο τύπος που ξεκινά το έργο.
Το έξυπνο συμβόλαιο εξοικονομεί…
1 Merkle root με την τρέχουσα κατάσταση. Κάθε φύλλο είναι η κατακερματισμένη κατάσταση λογαριασμού.
Θέλετε να δημιουργία ένας λογαριασμός?
state = AccountState (pubkey, υπόλοιπο, nonce)
state.index = self._tree.append (state.hash ())
Το PROVING γίνεται από…
Ο αναμεταδότης
Ο αναμεταδότης στέλνει στο έξυπνο συμβόλαιο…
- απόδειξη 𝚷
- η ρίζα της νέας κατάστασης Merkle
- απόδειξη 𝚷
Οι γνωστές είσοδοι της PROVING είναι…
- η ρίζα της παλιάς πολιτείας Merkle
- η ρίζα της νέας κατάστασης Merkle
Η διαδικασία ΠΑΡΟΧΗΣ αποδεικνύει ότι…
Δεδομένου
- το Old Merkle root (ήδη αποθηκευμένο στη σύμβαση)
- η ρίζα New Merkle (senti στην επιθετική συναλλαγή)
… Ο αναμεταδότης έχει μια λίστα συναλλαγών με έγκυρες υπογραφές για μετακίνηση από κατάσταση με παλιά ρίζα σε κατάσταση με νέα ρίζα
Η ΕΠΑΛΗΘΕΥΣΗ γίνεται από…
Το έξυπνο συμβόλαιο (κωδικοποιείται σε σταθερότητα, vyper, όπως θέλετε!)
Οι γνωστές εισόδους της διαδικασίας επαλήθευσης είναι…
Η διαδικασία του ίδιου PROVING είναι γνωστές εισροές, σαφώς…!
Όρια στην επεκτασιμότητα
Ο αναμεταδότης δεν στέλνει δεδομένα συναλλαγών στο έξυπνο συμβόλαιο (το οποίο είναι δαπανηρό), επομένως το όριο είναι στην πραγματικότητα το ποσό του αερίου για την επαλήθευση της απόδειξης SNARK.
Αναφέροντας τον Howard Wu's δουλειά σχετικά με την εκτέλεση της φάσης PROVING της SNARK σε κατανεμημένα συστήματα, barryWhiteHat αισιοδοξώς δηλώνει ότι είναι δυνατή η επιβεβαίωση 16666 συναλλαγών σε ένα τεράστιο SNARK (1 δισεκατομμύριο περιορισμοί!).
barryWhiteHat επίσης σκέφτεται είναι δυνατή η επαλήθευση της απόδειξης 𝚷 on-chain με 500k αέριο, πράγμα που σημαίνει ότι μπορείτε να βάλετε 16 SNARKs (8 εκατομμύρια / 500k) ανά μπλοκ, δηλαδή ~ 1.07 SNARKs ανά δευτερόλεπτο… που σημαίνει ~ 17,832 tx ανά δευτερόλεπτο (16,666 * 1.07).
Για το άπειρο και πέρα
- Το μόνο που λάμπει δεν είναι χρυσό / 1. Η ποσότητα υπολογιστικής ισχύος και μνήμης που χρειάζεστε στη φάση Proving μπορεί κυριολεκτικά να είναι σοκαριστική. Ειδικά στην έκδοση του barryWhiteHat, όπου μέρος της πολυπλοκότητας μετακινείται εκτός αλυσίδας. γράφει ο Μπάρι "Σε φορητό υπολογιστή με 7 GB ram και 20 GB χώρου ανταλλαγής, δυσκολεύεται να συγκεντρώσει 20 συναλλαγές ανά δευτερόλεπτο". Λοιπόν, αν ο στόχος είναι 17,832 tx ανά δευτερόλεπτο… LOL. Αυτό εισάγει μη ασήμαντες παράλληλες υπολογιστικές προκλήσεις. Αλλά αν το μέσο κόστος $ ανά συναλλαγή είναι πολύ φθηνότερο από τη συνηθισμένη επιλογή no-SNARKs… το παιχνίδι αξίζει το κερί.
- Το μόνο που λάμπει δεν είναι χρυσό / 2. Υπάρχει ένα σχετικό ζήτημα διαθεσιμότητας δεδομένων! Δεδομένου ότι μόνο η ρίζα του δέντρου είναι αποθηκευμένη στη σύμβαση, πρέπει να είστε σίγουροι ότι μια ολόκληρη έκδοση του δέντρου (ή, είναι το ίδιο, ολόκληρο το ιστορικό συναλλαγών) είναι πάντα διαθέσιμη. Εάν τα δεδομένα δεν είναι διαθέσιμα, το relayer, ακόμη και με έγκυρες υπογεγραμμένες συναλλαγές, δεν μπορεί να κάνει τίποτα επειδή δεν μπορεί να αποδείξει την παλιά κατάσταση → Συναλλαγές → Νέα κατάσταση.
- Προκειμένου ο αναμεταδότης να είναι αξιόπιστος και οι Ether στο συμβόλαιο να έχουν την ίδια αξία με τους Ether εκτός (πρόβλημα ρευστότητας)… οι χρήστες θα πρέπει να μπορούν να αποσύρουν χρήματα από το έξυπνο συμβόλαιο όταν το επιθυμούν, χωρίς να βασίζονται σε έναν (συγκεκριμένο) αναμεταδότη. Πως? Αυτό δεν εμπίπτει στο πεδίο αυτής της ανάρτησης 101, αλλά μπορείτε να το διαβάσετε στους συνημμένους συνδέσμους.
- Θέλετε να μάθετε περισσότερα σχετικά με τον τρόπο χειρισμού της τρέχουσας κατάστασης (διευθύνσεις, υπόλοιπα και μη) με δέντρο Merkle; Προσθήκη φύλλου, ενημέρωση φύλλου κ.λπ. Ολοκλήρωση παραγγελίας αυτή η βιβλιοθήκη (δοκιμαστικό αρχείο εδώ) που χρησιμοποιεί αυτό το υποκείμενο ενότητα. Ευχαριστώ HarryR!
- Θέλετε να ρυθμίσετε το προσωπικό σας περιβάλλον Ethereum-SNARKs; Ας ξεκινήσουμε εκτός αλυσίδας με C ++ (Ρύθμιση, Παροχή, Επαλήθευση) εδώ. Στη συνέχεια, μπορείτε να μεταβείτε στο Ethereum (μην ξεχνάτε, μόνο η επαλήθευση γίνεται on-chain!) Με τον Zokrates (repo, τη τεκμηρίωση για να ξεκινήσετε).
- Τι γίνεται με τη χρήση συσσωρευτών RSA αντί για δέντρα Merkle; Google "Rsa συσσωρευτές ethereum" να ξεκινήσω…
Απολαύστε το!
Twitter @marco_derossi
- 7
- Λογαριασμός
- Όλα
- μεταξύ των
- διαθεσιμότητα
- Βασικά
- Δισεκατομμύριο
- περιπτώσεις
- αλλαγή
- έλεγχοι
- coinbase
- χρήση υπολογιστή
- Ομοφωνία
- σύμβαση
- Δικαστικά έξοδα
- Ρεύμα
- Τωρινή κατάσταση
- dapps
- ημερομηνία
- σύνολο δεδομένων
- Αποκέντρωση
- Διάσταση
- Κατανεμημένος Λογαριασμός
- διανεμημένη τεχνολογία λογιστικών βιβλίων
- Περιβάλλον
- Αιθέρας
- ethereum
- EU
- EV
- απομίμηση
- Τελικά
- Όνομα
- Δωρεάν
- λειτουργία
- παιχνίδι
- GAS
- GitHub
- Δίνοντας
- Χρυσό
- καλός
- εξαιρετική
- καθοδηγήσει
- χασίσι
- εδώ
- Ψηλά
- ιστορία
- Πως
- hr
- HTTPS
- τεράστιος
- Εκατοντάδες
- ia
- ευρετήριο
- πληροφορίες
- IP
- IT
- Δουλειά
- Κλειδί
- laptop
- large
- οδηγήσει
- Καθολικό
- Επίπεδο
- LG
- Βιβλιοθήκη
- Ρευστότητα
- Λίστα
- Mainstream
- χάρτες
- medium
- εκατομμύριο
- Ορυχεία
- χρήματα
- μήνες
- Δημοφιλέστερα
- μετακινήσετε
- ονόματα
- δίκτυο
- κόμβων
- αριθμοί
- λειτουργίες
- τάξη
- ΑΛΛΑ
- ιδιοκτήτης
- Πληρωμή
- People
- παίχτης
- Δημοφιλής
- δύναμη
- ιδιωτικός
- ιδιωτικού κλειδιού
- Πρόγραμμα
- σχέδιο
- απόδειξη
- αποδεικνύει
- δημόσιο
- δημόσιο κλειδί
- ανακεφαλαιώσουμε
- RSA
- κανόνες
- τρέξιμο
- ένα ασφαλές
- οικονομία
- Απεριόριστες δυνατότητες
- Κλίμακα
- απολέπιση
- Επιστήμη
- ασφάλεια
- σειρά
- Κοινοποίηση
- Shared
- Κοντά
- Απλούς
- Μέγεθος
- ύπνος
- έξυπνος
- έξυπνη σύμβαση
- smartphone
- So
- λογισμικό
- στερεότητα
- Λύσεις
- SOLVE
- Χώρος
- Δαπάνες
- Εκκίνηση
- ξεκίνησε
- Κατάσταση
- Μελών
- επιτυχής
- σύστημα
- συστήματα
- Τεχνολογία
- δοκιμή
- ώρα
- κουπόνια
- κορυφή
- χείμαρος
- συναλλαγή
- Συναλλαγές
- Εμπιστευθείτε
- ενημερώσεις
- Χρήστες
- αξία
- Επαλήθευση
- Visa
- W
- Ο ΟΠΟΊΟΣ
- λόγια
- Εργασία
- λειτουργεί
- αξία
- X