Κέρδη:
- Δυνατότητα χρήσης τεχνητής νοημοσύνης για την παραγωγή πλαισίων, δοκιμών και αναθεώρησης προσχεδίων που βασίζονται σε αποδεδειγμένες βιβλιοθήκες (π.χ. OpenZeppelin) και κατανόηση ότι οι άνθρωποι εγγυώνται την ασφάλεια της παραγωγής
- Δυνατότητα επαλήθευσης της έκδοσης κώδικα, του μοτίβου και του ελέγχου πρόσβασης που παράγεται από την τεχνητή νοημοσύνη μέσω μεταγλώττισης, δοκιμής και δοκιμαστικού δικτύου
- Το να μπορείς να διακρίνεις ότι η μεταγλώττιση δεν σημαίνει ότι είσαι ασφαλής και ότι το δοκιμαστικό δίκτυο και ο έλεγχος είναι απαραίτητα.
Η σύνταξη ενός έξυπνου συμβολαίου διαφέρει από το συνηθισμένο λογισμικό: ο κώδικας που γράφετε είναι δημόσιος, αμετάβλητος και ένα πρόγραμμα που μετακινεί άμεσα χρήματα. Σε αυτή την ενότητα, θα μάθετε πώς να χρησιμοποιείτε την τεχνητή νοημοσύνη ως βοηθό ανάπτυξης έξυπνων συμβολαίων. Θα μάθουμε από την παραγωγή πρόχειρων έως τη δοκιμαστική γραφή, από την ανάκληση μοτίβων έως τη βελτιστοποίηση αερίου (χρέωση συναλλαγής). Αλλά ας είμαστε ξεκάθαροι από την αρχή: η τεχνητή νοημοσύνη παράγει σχεδιαγράμματα. Οι άνθρωποι εξασφαλίζουν ασφαλή κώδικα που μπαίνει στην παραγωγή.
Πρώτο έδαφος: γλώσσα και περιβάλλον
Η πιο κοινή γλώσσα έξυπνων συμβολαίων είναι η Solidity (η γλώσσα του Ethereum και του EVM — Ethereum Virtual Machine, η εικονική μηχανή στην οποία εκτελούνται τα συμβόλαια — συμβατές αλυσίδες). Η εναλλακτική είναι η Vyper (μια γλώσσα που μοιάζει με Python που στοχεύει να είναι πιο περιορισμένη και ευανάγνωστη). Ο κωδικός σας καταναλώνει αέριο (το κόστος κάθε συναλλαγής στο blockchain). Ο αναποτελεσματικός κώδικας είναι ακριβός. Το να διατηρείτε αυτούς τους όρους σαφείς στο πλαίσιο που τους δίνετε στο AI είναι το κλειδί για να έχετε ακριβή έξοδο.
Εκεί που η τεχνητή νοημοσύνη είναι πιο πολύτιμη δεν είναι η "γραφή από την αρχή" αλλά η παραγωγή του πλαισίου + καλό καλούπι: μια αρχή συμβατή με πρότυπα, ένα σχέδιο στο οποίο μπορείτε να προσθέσετε την τεχνογνωσία σας.
Επίπεδα χρήσης AI στην κωδικοποίηση
1. Δημιουργία σκελετών. Η τεχνητή νοημοσύνη εξορύσσει γρήγορα τον σκελετό ενός τυπικού διακριτικού (ERC-20) ή NFT (ERC-721 — ένα μοναδικό πρότυπο ψηφιακού περιουσιακού στοιχείου). Αλλά φροντίστε να κάνετε το AI να χρησιμοποιεί μια αποδεδειγμένη βιβλιοθήκη: για παράδειγμα, OpenZeppelin (η αξιόπιστη, ελεγμένη τυπική βιβλιοθήκη συμβάσεων της κοινότητας). Ο κανόνας είναι να χρησιμοποιείτε το δοκιμασμένο μπλοκ αντί να γράφετε την ασφάλεια από την αρχή.
2. Περιγραφή και ανασκόπηση της λειτουργίας. Η εξήγηση μιας υπάρχουσας λειτουργίας στην τεχνητή νοημοσύνη σάς επιτρέπει να εντοπίσετε νωρίς τα λογικά σφάλματα.
3. Παραγωγή δοκιμής. Η τεχνητή νοημοσύνη είναι καλή στη δημιουργία δοκιμαστικών περιπτώσεων για περιπτώσεις ακρόασης: μηδενική είσοδος, πολύ μεγάλος αριθμός, μη εξουσιοδοτημένος καλούντος, επαναλαμβανόμενη κλήση. Αυτό θυμίζει ένα από τα σενάρια που κάποιος παραλείπει.
4. Αέριο και αναγνωσιμότητα. Η τεχνητή νοημοσύνη επισημαίνει ακριβά μοτίβα, όπως η περιττή αποθήκευση και προτείνει εναλλακτικές λύσεις.
Υπόδειξη: Δώστε εντολή στην τεχνητή νοημοσύνη να "Βασιστεί στα ελεγμένα συμβόλαια του OpenZeppelin, να ξαναγράψει την ασφάλεια από την αρχή." Είναι πολύ πιο επικίνδυνο για μια τεχνητή νοημοσύνη να γράψει τον αρχικό κωδικό ασφαλείας παρά να χρησιμοποιήσει μια δοκιμασμένη βιβλιοθήκη.
Αδύναμη προτροπή / Ισχυρή προτροπή
Αδύναμη προτροπή:
Γράψε μου ένα συμβολικό συμβόλαιο.
Αυτή η προτροπή είναι επικίνδυνη: δεν είναι σαφές ποιο πρότυπο, ποια αλυσίδα, ποια βιβλιοθήκη, ποια απαίτηση ασφαλείας. Το AI δημιουργεί τυχαίο, πιθανώς παρωχημένο ή ανασφαλή κώδικα.
Ισχυρή προτροπή:
Ο ρόλος σας: ανώτερος προγραμματιστής Solidity. Δημιουργήστε ένα πρόχειρο διακριτικού ERC-20 για μια αλυσίδα συμβατή με EVM. Κανόνες:- Με βάση τα ελεγμένα συμβόλαια ERC20 και Ownable του OpenZeppelin.- Γράψτε ρητά τη γραμμή έκδοσης και άδειας χρήσης Solidity (SPDX).- Μόνο ο ιδιοκτήτης έχει άδεια να κόψει. προσθέστε ένα καπάκι ενάντια στο άπειρο πάτημα. - Προσθέστε σχόλιο NatSpec σε κάθε λειτουργία. - Γράψτε την ασφάλεια από την αρχή. Χρησιμοποιήστε το τυπικό μπλοκ. - Προσθέστε μια προειδοποίηση στο τέλος: "Αυτό είναι προσχέδιο, απαιτείται έλεγχος και δοκιμή". Σημειώστε τις περιοχές για τις οποίες δεν είστε σίγουροι με // TODO.
Διαφορά: η ισχυρή προτροπή παρέχει σαφείς προσδοκίες ρόλου, προτύπου, βιβλιοθήκης, ορίων ασφαλείας, τεκμηρίωσης και επικύρωσης.
Τέσσερα πρότυπα με δυνατότητα αντιγραφής
1) Σκελετός με βάση τα πρότυπα:
Ο ρόλος σας: Προγραμματιστής Solidity. Δημιουργήστε πλαίσιο σύμβασης [ERC-20 / ERC-721 / staking] που βασίζεται σε ελεγμένη βιβλιοθήκη OpenZeppelin. Γράψτε την άδεια SPDX και την έκδοση pragma. Προσθέστε έλεγχο πρόσβασης (ποιος μπορεί να καλέσει) σε κάθε εξωτερική λειτουργία. Επανεφεύρεση ασφάλειας. Χρησιμοποιήστε τυπικά μπλοκ. Αυτό είναι ένα προσχέδιο.
2) Ανασκόπηση λειτουργίας:
Εξετάστε την ακόλουθη συνάρτηση σαν ανώτερος προγραμματιστής: τι κάνει, ποιες καταστάσεις αλλάζει, ποιος μπορεί να την καλέσει; Σημειώστε πιθανά λογικά σφάλματα και κινδύνους ασφαλείας ως ΥΠΟΘΕΣΗ, συνδέοντας το καθένα με μια γραμμή στον κώδικα. Μην πείτε "ασφαλές" κατηγορηματικά. απλά αναφέρετε τα σημεία προσοχής.
3) Προσχέδιο δοκιμαστικού σεναρίου:
Προτείνετε δοκιμαστικές περιπτώσεις για αυτήν τη σύμβαση (θα μπορούσε να είναι ένα προσχέδιο για το Foundry/Hardhat). Καλύψτε συγκεκριμένα περιπτώσεις ορίων: μηδενική είσοδος, πολύ μεγάλος αριθμός, μη εξουσιοδοτημένη κλήση, κλήση επανεισδοχής, ανεπαρκή κεφάλαια. Γράψτε ΤΙ επιβεβαιώνει κάθε δοκιμή.
4) Ανασκόπηση αερίου και αναγνωσιμότητας:
Σε αυτό το συμβόλαιο, σημειώστε τα μοτίβα που μπορούν να μειώσουν το κόστος του αερίου: περιττή εγγραφή αποθήκευσης, εξωτερική κλήση στον βρόχο, επαναλαμβανόμενος υπολογισμός. Εξηγήστε τη διαφορά πριν/μετά σε κάθε πρόταση. Προτείνετε βελτιστοποιήσεις που διασπούν την ασφάλεια. Εάν δεν είναι ξεκάθαρο, πείτε "ρωτήστε τον ελεγκτή".
Τρεις μίνι θήκες (σε αριθμούς)
Περίπτωση 1 — Ο σκελετός εξοικονομήθηκε 4 ώρες. Μια ομάδα εξόρυξε τον σκελετό μιας ελεγμένης σύμβασης κατοχύρωσης βάσει βιβλιοθήκης με την τεχνητή νοημοσύνη σε 30 λεπτά. Χρειάστηκαν ~ 4 ώρες χειροκίνητα. Η ομάδα αφιέρωσε χρόνο στην ασφάλεια και τις δοκιμές. Το κέρδος δεν προήλθε από τη μεταφορά της ασφάλειας, αλλά από την επιτάχυνση του κουραστικού πλαισίου.
Περίπτωση 2 — Παγίδα παρωχημένης έκδοσης. Το AI δημιούργησε ένα μοτίβο που στέλνει ακατέργαστο αιθέρα με μεταφορά, το οποίο δεν συνιστάται πλέον επειδή τα δεδομένα εκπαίδευσης είναι παλιά. Ο προγραμματιστής το παρατήρησε αυτό και το άλλαξε στο τρέχον μοτίβο βάσει κλήσεων και με προστασία επανεισόδου. Μάθημα: Η βιβλιοθήκη/μοτίβο του AI επιβεβαιώνεται πάντα ότι είναι ενημερωμένη. Η AI δεν γνωρίζει πέρα από την ημερομηνία λήξης της εκπαίδευσης.
Περίπτωση 3 — Δοκιμή προσχέδιο που εμφανίστηκε κρυφό σφάλμα. Η δοκιμή "μη εξουσιοδοτημένου καλούντος" που παρήγαγε το AI αποκάλυψε ότι ο προγραμματιστής είχε ξεχάσει τον έλεγχο πρόσβασης σε μια λειτουργία. Μόνο ο ιδιοκτήτης λείπει 1 γραμμή, πιάστηκε σε 5 λεπτά στο testnet. Θα μπορούσε να είχε υπάρξει απώλεια κεφαλαίων στο κεντρικό δίκτυο. Μάθημα: Η τεχνητή νοημοσύνη καλύπτει το ανθρώπινο τυφλό σημείο στις δοκιμές.
Απομνημόνευση μοτίβων ασφαλείας με AI
Το AI είναι καλό στο να σας υπενθυμίζει γνωστά μοτίβα ευπάθειας, όπως μια λίστα ελέγχου. Τα πιο κοινά μοτίβα:
- Επανεισαγωγή: Πραγματοποίηση εξωτερικής κλήσης χωρίς ενημέρωση της κατάστασης. Λύση: εντολή επιταγών-επιπτώσεων-αλληλεπιδράσεων, φύλαξη επανεισόδου.
- Έλλειψη ελέγχου πρόσβασης: Οποιοσδήποτε μπορεί να καλέσει την κρίσιμη λειτουργία.
- Υπερχείλιση/υπόπτωση ακέραιου αριθμού: Το Modern Solidity πιάνει τα περισσότερα από αυτά, αλλά εξακολουθεί να αποτελεί κίνδυνο στον κώδικα χαμηλού επιπέδου.
- Ανεπαρκής επικύρωση εισόδου: Μηδενική διεύθυνση, έλεγχος μηδενικής ποσότητας.
- Εξάρτηση Oracle: Τυφλή εμπιστοσύνη σε εξωτερικά δεδομένα (όπως η τιμή).
Προσοχή: Η τεχνητή νοημοσύνη μπορεί να ανακαλέσει αυτήν τη λίστα, αλλά δεν μπορεί να εγγυηθεί εάν ένα στοιχείο στη λίστα βρίσκεται στον συγκεκριμένο κωδικό σας. Η λίστα ελέγχου είναι μια αρχή. Δεν αντικαθιστά τον έλεγχο κοντέινερ.
Λήψη του πλαισίου σωστά: Το μυστικό για καλό κώδικα από την τεχνητή νοημοσύνη
Η ποιότητα του κώδικα που παράγει το AI εξαρτάται άμεσα από την ποιότητα του περιβάλλοντος που του δίνετε. Στο Web3 αυτό είναι ιδιαίτερα κρίσιμο γιατί μια μικρή λεπτομέρεια (ποια αλυσίδα, ποια έκδοση Solidity, ποιο πρότυπο διακριτικό) αλλάζει ολόκληρη την έξοδο. Ένα καλό πλαίσιο περιλαμβάνει:
- Αλυσίδα και περιβάλλον στόχος: mainnet Ethereum ή Layer 2 (φθηνότερη sidechain που τρέχει πάνω από την mainchain); Το κόστος του φυσικού αερίου και ορισμένα χαρακτηριστικά διαφέρουν ανάλογα με την αλυσίδα.
- Έκδοση και βιβλιοθήκη: Ποια έκδοση Solidity, ποια έκδοση OpenZeppelin; Εάν δεν έχει καθοριστεί κάποια έκδοση, η τεχνητή νοημοσύνη μπορεί να παράγει ξεπερασμένα, καταργημένα μοτίβα.
- Απαιτήσεις ασφαλείας: Υπάρχει όριο, μπορεί να τεθεί σε παύση, μπορεί να αυξηθεί; Αυτά πρέπει να ειπωθούν από την αρχή.
- Περιορισμοί: Καθαρίστε τα όρια όπως "μην χρησιμοποιείτε συναρμολόγηση", "αποφύγετε την εξωτερική κλήση", "βελτιστοποιήστε το αέριο αλλά διατηρήστε την αναγνωσιμότητα".
Μια άλλη ισχυρή τεχνική είναι να ζητήσετε από την τεχνητή νοημοσύνη πρώτα το σχέδιο και μετά τον κωδικό: "Πρώτα απαριθμήστε τις λειτουργίες αυτού του συμβολαίου και τι θα κάνει το καθένα. γράψτε τον κωδικό μόλις τον εγκρίνω." Αυτό πιάνει το AI να πηγαίνει προς τη λάθος κατεύθυνση νωρίς και σας επιτρέπει να διατηρήσετε την αρχιτεκτονική απόφαση.
Συμβουλή: Ρωτήστε το AI "γιατί γράψατε αυτόν τον κώδικα έτσι;" παρακαλώ. Η εξήγηση του σκεπτικού θα επιταχύνει την εκμάθησή σας και θα φέρει στην επιφάνεια τυχόν λογικά σφάλματα (π.χ. μια ψευδή υπόθεση ασφάλειας). Μην εμπιστεύεστε την έξοδο ενός AI που δεν μπορεί να υπερασπιστεί τον δικό του κώδικα.
Συνήθη λάθη
- Βάζοντας την ασφάλεια στο AI από την αρχή. Χρησιμοποιήστε μια δοκιμασμένη βιβλιοθήκη.
- Δεν επιβεβαιώνει την έκδοση/μοτίβο που παράγεται από το AI. Τα δεδομένα προπόνησης μπορεί να είναι παλιά.
- Παράκαμψη δοκιμαστικού δικτύου. Κάθε πρόχειρο θα πρέπει να εκτελείται στο δοκιμαστικό δίκτυο πριν μεταδοθεί ζωντανά.
- Χωρίς προσθήκη NatSpec/τεκμηρίωση. Η επιθεώρηση και η συντήρηση γίνονται δύσκολες.
- Εσφαλμένη αντίληψη "Είναι μεταγλωττισμένο, άρα είναι ασφαλές". Το να είσαι μεταγλωττισμένος δεν σημαίνει ότι είσαι ασφαλής.
- Ξεχάστε τον έλεγχο πρόσβασης. Είναι ένα από τα πιο συνηθισμένα και ακριβά λάθη.
Συνοπτικά
- Στην έξυπνη σύνταξη συμβολαίων, η τεχνητή νοημοσύνη παράγει πλαίσια, δοκιμές και προσχέδια αναθεώρησης. Η Human εγγυάται την ασφάλεια της παραγωγής.
- Δημιουργήστε ασφάλεια όχι από την αρχή, αλλά με βάση αποδεδειγμένες βιβλιοθήκες (π.χ. OpenZeppelin).
- Η επικαιρότητα των εκδόσεων και των μοτίβων που παράγονται από την YZ επιβεβαιώνεται πάντα.
- Τα δοκιμαστικά στελέχη είναι πολύτιμα για την καταγραφή ανθρώπινων τυφλών σημείων (οριακές περιπτώσεις, έλεγχος πρόσβασης).
- Το να είσαι μεταγλωττισμένος δεν σημαίνει ότι είσαι ασφαλής. Το testnet και ο έλεγχος είναι απαραίτητοι.
Εργασία εφαρμογής
Για ένα απλό διακριτικό ERC-20, δημιουργήστε ένα πρόχειρο χρησιμοποιώντας την προτροπή "σκελετός βάσει προτύπων" παραπάνω. Στη συνέχεια: (1) ελέγξτε εάν χρησιμοποιεί μια επιλεγμένη βιβλιοθήκη, (2) ελέγξτε τα στοιχεία ελέγχου πρόσβασης, (3) δημιουργήστε δοκιμές με την προτροπή "δοκιμαστική περίπτωση" και εκτελέστε πραγματικά τουλάχιστον ένα τεστ απατεώνων. Βρείτε και σημειώστε τουλάχιστον ένα σημείο ασφαλείας που έχασε το AI.
λίστα ελέγχου
- [ ] Έχω δηλώσει ξεκάθαρα το πρότυπο και την αλυσίδα στην προτροπή.
- [ ] Ήθελα αποδεδειγμένη παραγωγή βάσει βιβλιοθήκης.
- [ ] Διατίθεται άδεια SPDX και έκδοση pragma.
- [ ] Υπάρχει έλεγχος πρόσβασης σε κάθε κρίσιμη λειτουργία.
- [ ] Δημιούργησα και έτρεξα δοκιμές για οριακές περιπτώσεις.
- [ ] Επιβεβαίωσα ότι η βιβλιοθήκη/μοτίβο είναι ενημερωμένη.
- [ ] Σημείωσα τον κωδικό για έλεγχο και δοκιμή. Δεν το πήρα χωρίς επίβλεψη στο mainnet.