Εισαγωγή Στην ανάπτυξη blockchain, η εξόρυξη συνόλων δεδομένων σε ένα blockchain είναι μια αρκετά δαπανηρή διαδικασία, επειδή χρεώνονται τέλη για κάθε νέα δεδομένα που εξορύσσονται στο επόμενο μπλοκ. Η ανάπτυξη έξυπνων συμβολαίων σε blockchain έχει ως αποτέλεσμα την εξόρυξη των δεδομένων του συμβολαίου στο επόμενο μπλοκ, το οποίο θα κοστίσει ορισμένα τέλη αερίου που χρεώνονται στον Ether εάν αναπτυχθούν στο blockchain Ethereum.
Αυτό το άρθρο θα δείξει πρακτικά πώς να αναπτύξετε πολλαπλές παρουσίες του έξυπνου συμβολαίου σας με τον σωστό τρόπο χρησιμοποιώντας το εργοστασιακό μοτίβο. Επίσης, θα συζητήσουμε το εργοστασιακό μοτίβο, τα οφέλη του και πότε να το χρησιμοποιήσετε.
Προϋπόθεση Για να ακολουθήσετε αυτό το άρθρο, θα πρέπει να έχετε προηγούμενη γνώση της ανάπτυξης έξυπνων συμβολαίων με το Solidity.
Τα ακόλουθα θα καλυφθούν σε αυτό το άρθρο:
Το εργοστασιακό μοτίβο Οφέλη από τη χρήση του εργοστασιακού μοτίβου στο Solidity Πότε να χρησιμοποιήσετε το εργοστασιακό μοτίβο Τύποι εργοστασιακών μοτίβων στο Solidity Το πρώτο μας έξυπνο συμβόλαιο Solidity Σύνταξη του πρώτου εργοστασιακού μας συμβολαίου Ένα μειονέκτημα του κανονικού εργοστασιακού μοτίβου Το κλωνοποιημένο εργοστασιακό μοτίβο Γιατί το μοτίβο κλωνοποίησης; Χρήση του εργοστασιακού μοτίβου κλώνου Σύγκριση μεταξύ των κανονικών εργοστασιακών μοτίβων και εργοστασιακών κλώνων Συμπέρασμα Το εργοστασιακό μοτίβο Το εργοστασιακό σχέδιο σχεδίασης είναι ένα πολύ γνωστό μοτίβο προγραμματισμού. Η ιδέα είναι απλή: αντί να δημιουργείτε άμεσα στιγμιότυπα αντικειμένων, έχετε ένα μόνο αντικείμενο (το εργοστάσιο) που το κάνει για εσάς.
Αυτό είναι το ίδιο με το Solidity επειδή τα έξυπνα συμβόλαια είναι αντικείμενα. Στο Solidity, ένα εργοστάσιο είναι μια σύμβαση που θα αναπτύξει πολλαπλές περιπτώσεις άλλων συμβάσεων.
Μερικές φορές χρειάζεται να δημιουργήσουμε διαφορετικούς τύπους αντικειμένων, αλλά δεν ξέρουμε τι είδους αντικείμενο θα δημιουργήσουμε μέχρι να εκτελεστεί ο κώδικας κατά το χρόνο εκτέλεσης. Σε τέτοιες περιπτώσεις, η εργοστασιακή τεχνική είναι χρήσιμη.
Γενικά, ένα βασικό εργοστασιακό συμβόλαιο θα πρέπει να μπορεί να αναπτύσσει πολλαπλές παρουσίες του ίδιου συμβολαίου, να αποθηκεύει αυτές τις δημιουργημένες εμφανίσεις στο blockchain και να τις ανακτά όταν χρειάζεται. Ίσως θέλετε να προσθέσετε περισσότερη λειτουργικότητα για τη διαχείριση των αναπτυγμένων συμβάσεων, όπως η ανάκτηση μιας συγκεκριμένης παρουσίας της σύμβασης, η απενεργοποίηση μιας παρουσίας της σύμβασης κ.λπ.
Οφέλη από τη χρήση του εργοστασιακού μοτίβου στο Solidity Τα παρακάτω είναι τα οφέλη από τη χρήση του εργοστασιακού μοτίβου στο Solidity:
Αναπτύξεις πολλαπλών συμβάσεων με υψηλή απόδοση αερίου Παρακολουθήστε όλες τις αναπτυγμένες συμβάσεις Εξοικονόμηση αερίου σε πολλαπλές αναπτύξεις συμβολαίων Πότε να χρησιμοποιείτε το εργοστασιακό μοτίβο Το εργοστασιακό μοτίβο είναι αποτελεσματικό στις ακόλουθες περιπτώσεις:
Όταν χρειάζεται να παράγουμε γρήγορα πολλαπλές παρουσίες ενός έξυπνου συμβολαίου κατά το χρόνο εκτέλεσης Όταν έχουμε να κάνουμε με μεγάλο αριθμό συμβάσεων που έχουν όλες τις ίδιες λειτουργίες Τύποι εργοστασιακών προτύπων στο Solidity Θα συζητήσουμε δύο τύπους εργοστασιακών προτύπων που εφαρμόζονται συνήθως στο Solidity έξυπνα συμβόλαια. Αυτά τα μοτίβα περιλαμβάνουν:
Το κανονικό εργοστασιακό μοτίβο — αυτό το εργοστασιακό μοτίβο αναπτύσσει πολλαπλές περιπτώσεις άλλων συμβάσεων χωρίς καμία βελτιστοποίηση για εξοικονόμηση αερίου σε κάθε ανάπτυξη Το κλωνοποιημένο εργοστασιακό μοτίβο — αυτό το εργοστασιακό μοτίβο αναπτύσσει πολλές περιπτώσεις άλλων συμβάσεων με έμφαση στη βελτιστοποίηση για εξοικονόμηση αερίου σε κάθε ανάπτυξη Η πρώτη μας στερεότητα έξυπνο συμβόλαιο Θα δημιουργήσουμε ένα απλό έξυπνο συμβόλαιο που θα χρησιμοποιηθεί από το εργοστασιακό συμβόλαιο για την ανάπτυξη πολλαπλών παρουσιών του:
// SPDX-License-Identifier: MIT pragma solidity >0.4.23 <0.9.0;
σύμβαση Foundation { string public name; διεύθυνση public _owner;
constructor(
string memory _name,
address _owner
) public {
name = _name;
_owner = msg.sender;
}
} Επειδή το Ethereum είναι έργο ανοιχτού κώδικα, η πρώτη γραμμή δείχνει την άδεια ανοιχτού κώδικα της σύμβασης. Η δεύτερη γραμμή καθορίζει την έκδοση Solidity που είναι απαραίτητη για την εκτέλεση αυτής της σύμβασης.
Κατόπιν αυτού, καθιερώνουμε τη σύμβαση θεμελίωσης, η οποία είναι ανάλογη με μια κλάση σε άλλες αντικειμενοστρεφείς γλώσσες προγραμματισμού. Η συνάρτηση κατασκευαστή εδώ αρχικοποιεί τις μεταβλητές κατάστασης της σύμβασης με τις τιμές που παρέχονται ως ορίσματα. Όταν δημιουργούμε ένα στιγμιότυπο του συμβολαίου, καλείται η συνάρτηση κατασκευαστή.
Γράφοντας το πρώτο μας εργοστασιακό συμβόλαιο Η σύμβαση του Ιδρύματος προς το παρόν δεν έχει κανένα μέσο δημιουργίας. Έτσι, πρόκειται να κάνουμε ένα εργοστασιακό συμβόλαιο που θα δημιουργήσει τις μεμονωμένες περιπτώσεις της σύμβασης θεμελίωσης χρησιμοποιώντας το κανονικό εργοστασιακό μοτίβο.
Παρακάτω είναι πώς πρέπει να μοιάζει ένα κανονικό εργοστασιακό συμβόλαιο:
// SPDX-License-Identifier: MIT
pragma solidity >0.4.23 <0.9.0;
import "./Foundation.sol";
contract FoundationFactory {
Foundation[] private _foundations;
function createFoundation(
string memory name
) public {
Foundation foundation = new Foundation(
name,
msg.sender
);
_foundations.push(foundation);
}
function allFoundations(uint256 limit, uint256 offset)
public
view
returns (Foundation[] memory coll)
{
return coll;
}
}
Η συνάρτηση createFoundation αναπτύσσει ένα στιγμιότυπο της σύμβασης του ιδρύματος και το αποθηκεύει στην αλυσίδα μπλοκ, ενώ η συνάρτηση allFoundations ανακτά όλα τα στιγμιότυπα της σύμβασης του ιδρύματος που είναι αποθηκευμένα στην αλυσίδα μπλοκ.