DedSec Project

move — συγκεντρωτικός οδηγός — DedSec Project

move — συγκεντρωτικός οδηγός Move Βασική ιδέα Η Move είναι resource-oriented γλώσσα smart contracts με ειδικούς τύπους πόρων και περιορισμούς ownership. Μικρό εκπαιδευτικό απόσπασμα Άσκηση…

Move

Βασική ιδέα

Η Move είναι resource-oriented γλώσσα smart contracts με ειδικούς τύπους πόρων και περιορισμούς ownership.

Μικρό εκπαιδευτικό απόσπασμα

// Conceptual lab: transfer a resource once; verify sender no longer owns it

Άσκηση βασισμένη στη συγκεκριμένη συμπεριφορά

Σε τοπικό test environment μοντελοποίησε ownership πριν/μετά transfer και έλεγξε αποτυχημένη διπλή χρήση.

Διάγνωση και όρια

Διαφορετικά Move frameworks έχουν άλλες βιβλιοθήκες και transactions· το απόσπασμα είναι περιγραφή, όχι κώδικας.

Κάνε την άσκηση με πραγματικά δοκιμαστικά δεδομένα και με έκδοση Move που ταιριάζει στον κώδικα. Σημείωσε μία αρχική πρόβλεψη και την πραγματική έξοδο. Για περίπλοκο ή μη διαθέσιμο runtime, παρουσίασε τη στατική ανάλυση ως τέτοια, όχι ως επιτυχημένη εκτέλεση. Δοκίμασε ξεχωριστά την κανονική περίπτωση και μία οριακή τιμή, χωρίς πραγματικά προσωπικά ή παραγωγικά δεδομένα.

Move — Αναλυτικός οδηγός εξάσκησης

Ξεκίνησε από αληθινή σύνταξη

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

module 0x1::hello {
    public fun answer(): u64 { 42 }
}

Περιβάλλον εκτέλεσης: Build as part of a platform-specific Move package.. Έλεγξε έκδοση compiler/interpreter πριν τροποποιήσεις τον κώδικα και κράτησε την αρχική έξοδο. Δούλεψε σε προσωρινό κατάλογο, μακριά από πραγματικά δεδομένα.

Οδηγούμενο εργαστήριο

Σχεδίασε module με τιμή χωρίς ability copy, προσπάθησε εσκεμμένα να τη διπλασιάσεις και διάβασε το compiler error. Εξήγησε τις abilities storage στην πλατφόρμα Move σου.

Δοκιμές ορίων

Τα manifests, addresses, entry functions και object models σε Sui/Aptos διαφέρουν: επίλεξε μία τοπική πλατφόρμα και όχι production deployment.

Προχωρημένη αποστολή

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

Move — Διαδρομή ουσιαστικής εξάσκησης

Μαθησιακό συμβόλαιο

Η άσκηση αφορά τις δυνατότητες πόρων της Move και όχι ένα γενικό tutorial token. Ένας πόρος χωρίς copy δεν αντιγράφεται κανονικά, ενώ χωρίς drop δεν απορρίπτεται σιωπηρά. Η αποθήκευση και οι entry functions διαφέρουν μεταξύ Aptos και Sui. Διάλεξε μία πλατφόρμα και κατέγραψε έκδοση toolchain.

Εργαστήριο Α: αναπαραγωγή αποτυχίας compilation

Σε αναλώσιμο Move package, όρισε πόρο struct Ticket has key { id: u64 } για περιβάλλον τύπου Aptos. Δοκίμασε να καταναλώσεις την ίδια τιμή δύο φορές: ο compiler πρέπει να απορρίψει μη επιτρεπτή μετακίνηση ή έλλειψη copy. Μην επινοείς το ακριβές diagnostic χωρίς εκτέλεση.

module 0x42::tickets {
    struct Ticket has key { id: u64 }

    public fun id(t: &Ticket): u64 {
        t.id
    }
}

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

Εργαστήριο Β: προστασία κατάστασης

Στο Aptos σχεδίασε entry function με &signer, υπολόγισε signer::address_of(account) και έλεγξε τον ιδιοκτήτη πριν από αποθήκευση Ticket. Στο Sui σχεδίασε ξεχωριστά object με UID και έλεγχο του αποστολέα μέσω TxContext. Μη μεταφέρεις τυφλά κώδικα μεταξύ τους.

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

Ανεξάρτητο έργο

Φτιάξε μη μεταβιβάσιμο achievement marker με λειτουργίες έκδοσης, ανάγνωσης και ανάκλησης. Σχεδίασε πίνακα καταστάσεων absent → issued → revoked. Απόρριψε δεύτερη έκδοση. Τεκμηρίωσε πώς γίνεται ανάκληση χωρίς την ικανότητα drop στην πλατφόρμα που διάλεξες.

Κριτήριο επαλήθευσης

Παράδωσε manifest, named addresses, έκδοση compiler, δείγμα compile-fail, επιτυχή και μη εξουσιοδοτημένα tests, αλλαγές κατάστασης και παρατηρήσεις gas. Το επιτυχές compile δεν αποδεικνύει έλεγχο δικαιωμάτων. Δήλωσε ποια tests δεν εκτελέστηκαν.