portaldacalheta.pt
  • Κύριος
  • Σχεδιασμός Για Κινητά
  • Ευκίνητο Ταλέντο
  • Τεχνολογία
  • Διεπαφή Ιστού
Πίσω Μέρος

Πορτοφόλια με χρονικό περιορισμό: Εισαγωγή στις έξυπνες συμβάσεις Ethereum



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

Ξεκινώντας στο Έξυπνη σύμβαση Ethereum Ο χώρος μπορεί να είναι λίγο συντριπτικός καθώς η καμπύλη μάθησης είναι αρκετά απότομη. Ελπίζουμε ότι αυτό το άρθρο (και μελλοντικά άρθρα στη σειρά Ethereum) μπορεί να ανακουφίσει αυτόν τον πόνο και να σας κάνει να ξεκινήσετε γρήγορα.



Τρούφα, Στερεότητα και ĐApps

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



Τι καλύπτεται σε αυτήν την ανάρτηση:



  • Εφαρμογές πορτοφολιών κλειδωμένων στο χρόνο
  • Ρύθμιση περιβάλλοντος ανάπτυξης
  • Έξυπνη ανάπτυξη συμβολαίων με το πλαίσιο Truffle
    • Περιγραφή των συμβάσεων σταθερότητας
    • Πώς να μεταγλωττίσετε, να μετεγκαταστήσετε και να δοκιμάσετε έξυπνα συμβόλαια
  • Χρησιμοποιώντας μια εφαρμογή για αλληλεπίδραση με έξυπνα συμβόλαια από το πρόγραμμα περιήγησης
    • Ρύθμιση προγράμματος περιήγησης με MetaMask
    • Μια διερεύνηση της κύριας θήκης χρήσης

Πορτοφόλια που είναι κλειδωμένα στο χρόνο: Θήκες χρήσης

Υπάρχουν πολλές διαφορετικές εφαρμογές Αιθέριο έξυπνες συμβάσεις. Τα πιο δημοφιλή αυτή τη στιγμή είναι τα κρυπτονομίσματα (που εφαρμόζονται ως διακριτικά ERC20) και οι πωλήσεις διακριτικών crowdfunding (π.χ. αρχικές προσφορές νομισμάτων ή ICO.) Ένα καλό παράδειγμα ενός διακριτικού βοηθητικού προγράμματος ERC20 είναι το Κινητήρας νομισμάτων . Σε αυτήν την ανάρτηση ιστολογίου, θα διερευνήσουμε κάτι διαφορετικό: Η ιδέα του κλειδώματος χρημάτων σε συμβόλαια κρυπτογράφησης. Η ίδια η ιδέα έχει διάφορες περιπτώσεις χρήσης.

Εξουσιοδότηση για ICO

Υπάρχουν πολλά παραδείγματα, αλλά ίσως ο πιο συνηθισμένος λόγος αυτή τη στιγμή να κλειδώσετε κεφάλαια ονομάζεται «κατοχύρωση». Φανταστείτε ότι μόλις δημιουργήσατε έναν επιτυχημένο ICO και η εταιρεία σας εξακολουθεί να διαθέτει την πλειοψηφία των διακριτικών που διανέμονται μεταξύ των μελών της ομάδας σας.



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

'Τελευταία Θέληση και Διαθήκη' που βασίζεται σε Crypto

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



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

Ταμείο συντάξεων ή καταπιστευμάτων

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



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

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



Ρύθμιση ανάπτυξης Ethereum

Πριν προχωρήσετε στην ανάπτυξη έξυπνης σύμβασης, πρέπει να έχετε Node.js και Πηγαίνω εγκατεστημένο στο μηχάνημά σας. Σε αυτό το ιστολόγιο, πρόκειται να χρησιμοποιήσουμε το Υτανο δομή. Παρόλο που μπορείτε να το κάνετε χωρίς αυτό, το Truffle μειώνει σημαντικά το εμπόδιο εισόδου στην ανάπτυξη, τον έλεγχο και την ανάπτυξη έξυπνων συμβάσεων Ethereum. Συμφωνούμε απόλυτα με τη δήλωσή τους:

Το Truffle είναι το πιο δημοφιλές πλαίσιο ανάπτυξης για το Ethereum με αποστολή να κάνει τη ζωή σας πολύ πιο εύκολη.



Για να το εγκαταστήσετε, εκτελέστε την ακόλουθη εντολή:

npm install -g truffle

Τώρα, λάβετε τον κωδικό αυτού του έργου:

git clone https://github.com/radek1st/time-locked-wallets cd time-locked-wallets

Είναι σημαντικό να σημειωθεί ότι το έργο ακολουθεί την τυπική δομή του έργου Truffle και οι κατάλογοι ενδιαφέροντος είναι:

  • contracts: Διατηρεί όλα τα συμβόλαια Στερεότητας
  • migrations: Περιέχει σενάρια που περιγράφουν τα βήματα της μετεγκατάστασης
  • src: Περιλαμβάνει τον κωδικό Ð App
  • test: Αποθηκεύει όλες τις δοκιμαστικές συμβάσεις

Επισκόπηση των έξυπνων συμβάσεων που περιλαμβάνονται

Υπάρχουν πολλά συμβόλαια που περιλαμβάνονται σε αυτό το έργο. Εδώ είναι το σύνολο:

  • TimeLockedWallet.sol είναι το κύριο συμβόλαιο αυτού του έργου και περιγράφεται λεπτομερώς παρακάτω.
  • TimeLockedWalletFactory.sol είναι το factory συμβόλαιο που επιτρέπει σε οποιονδήποτε να αναπτύξει εύκολα το δικό του TimeLockedWallet.
  • ERC20.sol είναι μια διεπαφή του προτύπου ERC20 για μάρκες Ethereum.
  • ApeeScapeToken.sol είναι ένα προσαρμοσμένο διακριτικό ERC20.
  • SafeMath.sol είναι μια μικρή βιβλιοθήκη που χρησιμοποιείται από το ApeeScapeToken για την εκτέλεση ασφαλών αριθμητικών λειτουργιών.
  • Migrations.sol είναι μια εσωτερική σύμβαση Truffle που διευκολύνει τις μεταναστεύσεις.

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

TimeLockedWallet.sol

Το TimeLockedWallet.sol Το συμβόλαιο στερεότητας μοιάζει με αυτό:

pragma solidity ^0.4.18;

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

import './ERC20.sol';

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

contract TimeLockedWallet { ... }

Τα παραπάνω είναι το κύριο αντικείμενο μας. contract καλύπτει τον κώδικα του συμβολαίου μας. Ο κωδικός που περιγράφεται παρακάτω είναι από μέσα στα σγουρά αγκύλια.

address public creator; address public owner; uint public unlockDate; uint public createdAt;

Εδώ ορίζουμε πολλά public μεταβλητές οι οποίες από προεπιλογή δημιουργούν αντίστοιχες μεθόδους λήψης. Μερικά από αυτά είναι τύπου uint (μη υπογεγραμμένοι ακέραιοι αριθμοί) και ένα ζευγάρι είναι address (Διευθύνσεις Ethereum 16 χαρακτήρων.)

modifier onlyOwner { require(msg.sender == owner); _; }

Με απλούς όρους, modifier είναι μια προϋπόθεση που πρέπει να τηρείται πριν καν ξεκινήσετε την εκτέλεση της συνάρτησης στην οποία είναι συνδεδεμένη.

function TimeLockedWallet( address _creator, address _owner, uint _unlockDate ) public { creator = _creator; owner = _owner; unlockDate = _unlockDate; createdAt = now; }

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

Λάβετε υπόψη ότι εάν επρόκειτο να αλλάξετε το όνομα της σύμβασης, αυτό θα γινόταν μια κανονική συνάρτηση που θα καλούσε οποιοσδήποτε και θα αποτελούσε ένα backdoor στη σύμβασή σας, όπως συνέβαινε στο Σφάλμα Parity Multisig Wallet . Επιπλέον, σημειώστε ότι η υπόθεση έχει επίσης σημασία, οπότε αν αυτό το όνομα της συνάρτησης ήταν με πεζά, θα γινόταν επίσης μια κανονική συνάρτηση — και πάλι, όχι κάτι που θέλετε εδώ.

function() payable public { Received(msg.sender, msg.value); }

Η παραπάνω συνάρτηση είναι ειδικού τύπου και ονομάζεται fallback λειτουργία. Εάν κάποιος στείλει οποιοδήποτε ETH σε αυτό το συμβόλαιο, θα το λάβουμε με χαρά. Το υπόλοιπο ETH του συμβολαίου θα αυξηθεί και θα ενεργοποιήσει ένα Received Εκδήλωση. Για να επιτρέψετε σε άλλες λειτουργίες να δέχονται εισερχόμενες ETH, μπορείτε να τις επισημάνετε με το payable λέξη-κλειδί.

function info() public view returns(address, address, uint, uint, uint) { return (creator, owner, unlockDate, createdAt, this.balance); }

Αυτή είναι η πρώτη μας κανονική λειτουργία. Δεν έχει παραμέτρους λειτουργίας και καθορίζει την έξοδο προς επιστροφή. Σημειώστε ότι this.balance επιστρέφει το τρέχον υπόλοιπο αιθέρα αυτής της σύμβασης.

function withdraw() onlyOwner public { require(now >= unlockDate); msg.sender.transfer(this.balance); Withdrew(msg.sender, this.balance); }

Η παραπάνω συνάρτηση μπορεί να εκτελεστεί μόνο εάν onlyOwner ικανοποιείται ο τροποποιητής που ορίστηκε νωρίτερα. Εάν το require Η δήλωση δεν είναι αληθής, η σύμβαση τερματίζεται με σφάλμα. Εκεί ελέγξουμε αν το unlockDate έχει περάσει. msg.sender είναι ο καλών αυτής της λειτουργίας και μεταβιβάζεται ολόκληρο το υπόλοιπο αιθέρα του συμβολαίου. Στην τελευταία γραμμή, πυροδοτούμε επίσης ένα Withdrew Εκδήλωση. Τα γεγονότα περιγράφονται λίγο αργότερα.

πώς να δημιουργήσετε οπτικοποίηση δεδομένων

Είναι ενδιαφέρον, now —ότι ισοδυναμεί με block.timestamp —Μπορεί να μην είναι τόσο ακριβές όσο μπορεί κανείς να σκεφτεί. Εναπόκειται στον ανθρακωρύχο να το επιλέξει, οπότε μπορεί να είναι έως και 15 λεπτά (900 δευτερόλεπτα), όπως εξηγείται στα ακόλουθα τύπος :

parent.timestamp >= block.timestamp <= now + 900 seconds

Κατά συνέπεια, now δεν πρέπει να χρησιμοποιείται για τη μέτρηση μικρών μονάδων χρόνου.

function withdrawTokens(address _tokenContract) onlyOwner public { require(now >= unlockDate); ERC20 token = ERC20(_tokenContract); uint tokenBalance = token.balanceOf(this); token.transfer(owner, tokenBalance); WithdrewTokens(_tokenContract, msg.sender, tokenBalance); }

Εδώ είναι η λειτουργία μας για την ανάληψη των διακριτικών ERC20. Καθώς το ίδιο το συμβόλαιο δεν γνωρίζει τυχόν διακριτικά που έχουν εκχωρηθεί σε αυτήν τη διεύθυνση, πρέπει να παραδώσουμε τη διεύθυνση του αναπτυγμένου διακριτικού ERC20 που θέλουμε να αποσύρουμε. Το δημιουργούμε με ERC20(_tokenContract) και, στη συνέχεια, βρείτε και μεταφέρετε ολόκληρο το υπόλοιπο του διακριτικού στον παραλήπτη. Περνάμε επίσης ένα WithdrewTokens Εκδήλωση.

event Received(address _from, uint _amount); event Withdrew(address _to, uint _amount); event WithdrewTokens(address _tokenContract, address _to, uint _amount);

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

Αυτό είναι το μόνο που χρειαζόμαστε για να κλειδώσουμε τα διακριτικά αιθέρα και ERC20 - μόνο μερικές γραμμές κώδικα. Όχι πολύ κακό, ε; Τώρα ας ρίξουμε μια ματιά στο άλλο μας συμβόλαιο, TimeLockedWalletFactory.sol.

TimeLockedWalletFactory.sol

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

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

pragma solidity ^0.4.18; import './TimeLockedWallet.sol'; contract TimeLockedWalletFactory { ... }

Τα παραπάνω είναι απλά και πολύ παρόμοια με την προηγούμενη σύμβαση.

mapping(address => address[]) wallets;

Εδώ, ορίζουμε ένα mapping πληκτρολογήστε, που μοιάζει με λεξικό ή χάρτη, αλλά με όλα τα δυνατά πλήκτρα προκαθορισμένα και δείχνοντας τις προεπιλεγμένες τιμές. Στην περίπτωση του address τύπος, η προεπιλογή είναι μηδενική διεύθυνση 0x00. Έχουμε επίσης έναν τύπο πίνακα, address[], που κρατά address es.

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

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

function getWallets(address _user) public view returns(address[]) { return wallets[_user]; }

Εδώ, χρησιμοποιούμε την παραπάνω συνάρτηση για να επιστρέψουμε όλα τα πορτοφόλια συμβολαίου a _user δημιουργήθηκε ή έχει δικαιώματα. Σημειώστε ότι view (σε παλαιότερες εκδόσεις complier που ονομάζονται constant) δηλώνει ότι πρόκειται για μια συνάρτηση που δεν αλλάζει την κατάσταση blockchain και ως εκ τούτου μπορεί να κληθεί δωρεάν, χωρίς να ξοδέψετε κανένα αέριο.

function newTimeLockedWallet(address _owner, uint _unlockDate) payable public returns(address wallet) { wallet = new TimeLockedWallet(msg.sender, _owner, _unlockDate); wallets[msg.sender].push(wallet); if(msg.sender != _owner){ wallets[_owner].push(wallet); } wallet.transfer(msg.value); Created(wallet, msg.sender, _owner, now, _unlockDate, msg.value); }

Αυτό είναι το πιο σημαντικό μέρος της σύμβασης: Η εργοστασιακή μέθοδος. Μας επιτρέπει να δημιουργήσουμε ένα νέο πορτοφόλι με το χρόνο κλειδώματος, καλώντας τον κατασκευαστή του: new TimeLockedWallet(msg.sender, _owner, _unlockDate). Στη συνέχεια αποθηκεύουμε τη διεύθυνσή του για τον δημιουργό και τον παραλήπτη. Αργότερα μεταφέρουμε όλους τους προαιρετικούς αιθέρες που έχουν περάσει σε αυτήν την εκτέλεση λειτουργίας στη διεύθυνση πορτοφολιού που δημιουργήθηκε πρόσφατα. Τέλος, επισημαίνουμε το Create συμβάν, ορίζεται ως:

event Created(address wallet, address from, address to, uint createdAt, uint unlockDate, uint amount);

ApeeScapeToken.sol

Αυτό το σεμινάριο δεν θα ήταν τόσο διασκεδαστικό εάν δεν δημιουργήσαμε το δικό μας διακριτικό Ethereum, οπότε για πληρότητα, ζωντανεψουμε ApeeScapeToken. ApeeScapeToken είναι ένα τυπικό διακριτικό ERC20 που υλοποιεί τη διεπαφή που παρουσιάζεται παρακάτω:

contract ERC20 { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); }

Αυτό που το διακρίνει από άλλα διακριτικά ορίζεται παρακάτω:

string public constant name = 'ApeeScape Token'; string public constant symbol = 'TTT'; uint256 public constant decimals = 6; totalSupply = 1000000 * (10 ** decimals);

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

Για να ανακαλύψετε διαφορετικές παραλλαγές συμβολαίων συμβόλων, μπορείτε να εξερευνήσετε το Repo OpenZeppelin .

Truffle Console: Μεταγλώττιση, μετεγκατάσταση και δοκιμή έξυπνων συμβολαίων

Για να ξεκινήσετε γρήγορα, εκτελέστε το Truffle με το ενσωματωμένο blockchain:

truffle develop

Θα πρέπει να δείτε κάτι τέτοιο:

Truffle Develop started at http://localhost:9545/ Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

Ο μνημονικός σπόρος σας επιτρέπει να αναδημιουργήσετε τα ιδιωτικά και δημόσια κλειδιά σας. Για παράδειγμα, εισαγάγετέ το στο MetaMask όπως φαίνεται εδώ:

ΕΠΑΝΑΦΟΡΑ ΒΑΛΟΥ: Χρησιμοποιώντας έναν μνημονικό σπόρο πορτοφολιού για την εισαγωγή ιδιωτικών και δημόσιων κλειδιών στο MetaMask.

Για να συντάξετε τα συμβόλαια, εκτελέστε:

> compile

Πρέπει να δεις:

Compiling ./contracts/ERC20.sol... Compiling ./contracts/Migrations.sol... Compiling ./contracts/SafeMath.sol... Compiling ./contracts/TimeLockedWallet.sol... Compiling ./contracts/TimeLockedWalletFactory.sol... Compiling ./contracts/ApeeScapeToken.sol... Writing artifacts to ./build/contracts

Τώρα, πρέπει να καθορίσουμε ποιες συμβάσεις θέλουμε να αναπτύξουμε. Αυτό γίνεται σε migrations/2_deploy_contracts.js:

var TimeLockedWalletFactory = artifacts.require('TimeLockedWalletFactory'); var ApeeScapeToken = artifacts.require('ApeeScapeToken'); module.exports = function(deployer) { deployer.deploy(TimeLockedWalletFactory); deployer.deploy(ApeeScapeToken); };

Πρώτα εισάγουμε τα δύο αντικείμενα συμβολαίου TimeLockedWalletFactory και ApeeScapeToken. Τότε απλώς τα αναπτύσσουμε. Χάσαμε TimeLockedWallet επίτηδες, καθώς αυτή η σύμβαση αναπτύσσεται δυναμικά. Για περισσότερες πληροφορίες σχετικά με τις μετεγκαταστάσεις, ανατρέξτε στο Τεκμηρίωση μετεγκατάστασης τρούφας .

Για να μετεγκαταστήσετε τα συμβόλαια, εκτελέστε:

> migrate

Αυτό θα πρέπει να έχει ως αποτέλεσμα κάτι που μοιάζει με το ακόλουθο:

Running migration: 1_initial_migration.js Deploying Migrations... ... 0x1c55ae0eb870ac1baae86eeb15f3aba3f521df46d9816e04400e9b5951ecc099 Migrations: 0x8cdaf0cd259887258bc13a92c0a6da92698644c0 Saving successful migration to network... ... 0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying TimeLockedWalletFactory... ... 0xe9d9c37508bb58a1591d0f052d6870810118a0a19f728bf0cea4f4e5c17acd7a TimeLockedWalletFactory: 0x345ca3e014aaf5dca488057592ee47305d9b3e10 Deploying ApeeScapeToken... ... 0x0469ce110735f27bbb1a85c85a77ba4b0ba0d5aa52c3d67164045b849d8b2ed6 ApeeScapeToken: 0xf25186b5081ff5ce73482ad761db0eb0d25abfbf Saving successful migration to network... ... 0x059cf1bbc372b9348ce487de910358801bbbd1c89182853439bec0afaee6c7db Saving artifacts...

Μπορείτε να πείτε ότι TimeLockedWalletFactory και ApeeScapeToken αναπτύχθηκε με επιτυχία.

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

> test

… Και ελπίζουμε ότι θα δείτε όλες τις δοκιμές να περνούν έτσι:

Contract: TimeLockedWalletFactory ✓ Factory created contract is working well (365ms) Contract: TimeLockedWallet ✓ Owner can withdraw the funds after the unlock date (668ms) ✓ Nobody can withdraw the funds before the unlock date (765ms) ✓ Nobody other than the owner can withdraw funds after the unlock date (756ms) ✓ Owner can withdraw the ApeeScapeToken after the unlock date (671ms) ✓ Allow getting info about the wallet (362ms) 6 passing (4s)

Πορτοφόλι με χρονικό κλείδωμα ÐΕφαρμογή

Ήρθε η ώρα να τα δούμε όλα σε δράση. Ο ευκολότερος τρόπος για να αλληλεπιδράσετε με οποιοδήποτε blockchain είναι με τη χρήση κατανεμημένων εφαρμογών με UI ιστού, που ονομάζεται ÐApps (ή μερικές φορές 'dapps.')

Διαμόρφωση κατανεμημένης εφαρμογής

Για να εκτελέσετε αυτήν την εφαρμογή, θα πρέπει να έχετε πρόγραμμα περιήγησης με δυνατότητα Ethereum. Ο ευκολότερος τρόπος για να επιτευχθεί αυτό είναι να εγκαταστήσετε το MetaMask Πρόσθετο Chrome. Υπάρχει επίσης ένα οπτικός οδηγός για την εγκατάσταση και τη διαμόρφωση του MetaMask με το Truffle .

Σενάριο έξυπνης σύμβασης

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

Λογαριασμοί για την Αλίκη και τον Μπομπ στο MetaMask.

Περίγραμμα σεναρίου:

  • Η Άλις δημιουργεί ένα χρονικά κλειδωμένο πορτοφόλι για τον Μπομπ και στέλνει κάποιο ETH
  • Η Alice στέλνει επιπλέον μερικά ERC20 ApeeScape Tokens
  • Ο Μπομπ μπορεί να δει τα πορτοφόλια στα οποία έχει πρόσβαση και αυτά που δημιούργησε
  • Ο Μπομπ δεν μπορεί να αποσύρει χρήματα πριν λήξει το χρονικό κλείδωμα του πορτοφολιού
  • Ο Μπομπ αποσύρει το ETH όταν ξεκλειδωθεί
  • Ο Μπομπ αποσύρει όλα τα κουπόνια ERC20 ApeeScape

Πρώτον, η Άλις δημιουργεί ένα χρονικά κλειδωμένο πορτοφόλι για τον Μπομπ και στέλνει έναν αρχικό αιθέρα. Μπορούμε να δούμε ότι ένα νέο πορτοφόλι συμβολαίου έχει δημιουργηθεί και ανήκει στον Bob:

Δημιουργία πορτοφολιού για την Alice χρησιμοποιώντας την εφαρμογή Time-Locked Wallets ĐApp.

Σε οποιοδήποτε σημείο μετά τη δημιουργία της σύμβασης, το πορτοφόλι μπορεί να συμπληρωθεί. Η ανανέωση μπορεί να προέρχεται από οποιονδήποτε και να έχει τη μορφή κωδικών αιθέρα ή ERC20. Ας ζητήσουμε από την Alice να στείλει 100 κουπόνια ApeeScape στο νέο πορτοφόλι του Bob, όπως απεικονίζεται εδώ:

Η Αλίκη χρησιμοποιεί το Time-Locked Wallets Đ App για να στείλει το Bob 100 ApeeScape Tokens.

Από την άποψη της Άλις, το πορτοφόλι θα μοιάζει με αυτό μετά την ανανέωση:

Αλίκη

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

Βαρίδι

Περιμένοντας υπομονετικά μέχρι να λήξει η κλειδαριά…

Ένα τώρα ξεκλείδωτο πορτοφόλι στο Time-Locked Wallets Đ App.

… Ο Μπομπ είναι πλέον έτοιμος να αποσύρει τόσο τα αιθέρα όσο και τα κουπόνια ApeeScape:

Ο Μπομπ αποσύρει αιθέρα από το ξεκλείδωτο πορτοφόλι.

Ο Μπομπ αποσύρει τα κουπόνια ApeeScape από το ξεκλείδωτο πορτοφόλι.

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

Το ξεκλείδωτο πορτοφόλι, τώρα άδειο.

Δίκτυο Ethereum

Εάν θέλετε να αλληλεπιδράσετε με τα περιγραφόμενα συμβόλαια, δεν χρειάζεται να τα εκτελέσετε τοπικά: τα έχουμε αναπτύξει στο Ethnetum Rinkeby testnet. Το ApeeScapeToken αναπτύσσεται εδώ και το TimeLockedWalletFactory αναπτύσσεται εδώ .

Μπορείτε να χρησιμοποιήσετε το αναπτύχθηκε ÐApp , συνδέεται με τις παραπάνω συμβάσεις που εξυπηρετούνται από τις σελίδες του GitHub. Λάβετε υπόψη ότι χρειάζεστε το MetaMask εγκατεστημένο και συνδεδεμένο στο Rinkeby.

Αντιμετώπιση προβλημάτων

Αντιμετωπίσαμε μερικά ζητήματα κατά την ανάπτυξη αυτού του έργου. Η πρώτη ήταν η αστάθεια του MetaMask στο Chrome (όπως παραπονιέται για μη έγκυρη nonce). Η ευκολότερη επιδιόρθωση που βρήκαμε ήταν απλώς η επανεγκατάσταση της προσθήκης.

Επίσης, το Truffle θα έβγαινε από το συγχρονισμό μερικές φορές κατά την επεξεργασία έξυπνων συμβολαίων και θα παραπονιόταν με ένα invalid number of solidity parameters λάθος. Βρήκαμε ότι ένα απλό rm -r build και κάνοντας ξανά μια μεταγλώττιση / μετεγκατάσταση θα το καθαρίσει.

Ανάπτυξη Ethereum: Αξίζει την απότομη καμπύλη μάθησης

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

Ο πηγαίος κώδικας για αυτό το έργο είναι διαθέσιμο στο GitHub .

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

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

Πιστώσεις

Ευχαριστώ πολύ Maciek Zielinski για τις συνεισφορές του σε αυτό το έργο.

Κατανόηση των βασικών

Τι είναι ένα έξυπνο συμβόλαιο;

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

Τι είναι η εικονική μηχανή Ethereum;

Το Ethereum Virtual Machine (EVM) είναι ένα περιβάλλον χρόνου εκτέλεσης με άμμο για έξυπνες συμβάσεις που υλοποιούνται ως μηχανή στοίβας που εκτελεί bytecode. Επικεντρώνεται στην παροχή ασφάλειας και στην εκτέλεση μη αξιόπιστου κώδικα από υπολογιστές σε όλο τον κόσμο.

Τι είναι το Mist και το Ethereum Wallet;

Το Mist είναι το επίσημο πρόγραμμα περιήγησης για κατανεμημένες εφαρμογές (ĐApps, μερικές φορές dapps) που είναι φιλικές προς το χρήστη διεπαφές / UI στο δίκτυο Ethereum. Το Ethereum Wallet είναι ένα από αυτά τα ĐApps. Και τα δύο αναπτύσσονται από τους ίδιους ανθρώπους που έχουν κατασκευάσει το Ethereum.

Είναι το Ethereum ανοιχτού κώδικα;

Παραθέτοντας τον Vitalik Buterin, τον εφευρέτη του Ethereum: «Τα πάντα στο Ethereum, συμπεριλαμβανομένου του ιστότοπου, των εργαλείων, των λευκών εγγράφων και φυσικά όλο το λογισμικό και οι μεταγλωττιστές είναι 100%, ανοιχτού κώδικα από τοίχο σε τοίχο και υπό την GPL».

Είναι αποκεντρωμένο το Ethereum;

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

Ποια γλώσσα προγραμματισμού χρησιμοποιεί το Ethereum;

Η γλώσσα επιλογής του Ethereum είναι αυτή τη στιγμή το Solidity. Το Solidity είναι μια γλώσσα προγραμματισμού προσανατολισμένη στα συμβόλαια, εμπνευσμένη κυρίως από JavaScript, C ++ και Python, που χρησιμοποιούνται για τη σύνταξη έξυπνων συμβολαίων. Υπάρχουν και άλλες γλώσσες στον ορίζοντα, όπως το Vyper.

Τι είναι τα διακριτικά ERC20;

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

Αυξημένη Πραγματικότητα εναντίον Εικονική πραγματικότητα εναντίον Μικτή πραγματικότητα: Ένας εισαγωγικός οδηγός

Σχεδιασμός Ux

Αυξημένη Πραγματικότητα εναντίον Εικονική πραγματικότητα εναντίον Μικτή πραγματικότητα: Ένας εισαγωγικός οδηγός
Το στατιστικό πλεονέκτημα: Βελτιώστε τις μετρήσεις σας με τη μέθοδο αναλογιστικής αποτίμησης

Το στατιστικό πλεονέκτημα: Βελτιώστε τις μετρήσεις σας με τη μέθοδο αναλογιστικής αποτίμησης

Διαδικασίες Χρηματοδότησης

Δημοφιλείς Αναρτήσεις
Κοιτάζοντας τα αποτυχημένα IPO στην εποχή του μονόκερου
Κοιτάζοντας τα αποτυχημένα IPO στην εποχή του μονόκερου
Top 10 UX Παραδοτέα Χρήση κορυφαίων σχεδιαστών
Top 10 UX Παραδοτέα Χρήση κορυφαίων σχεδιαστών
Evolving Emoji: Σχεδιασμός για το νέο πρόσωπο των μηνυμάτων
Evolving Emoji: Σχεδιασμός για το νέο πρόσωπο των μηνυμάτων
Διευθυντής Υπηρεσιών Πελατών Επιχειρήσεων, Επικοινωνιών, Μέσων, Ψυχαγωγίας και Τεχνολογίας
Διευθυντής Υπηρεσιών Πελατών Επιχειρήσεων, Επικοινωνιών, Μέσων, Ψυχαγωγίας και Τεχνολογίας
Τεχνικές έρευνας UX και οι εφαρμογές τους
Τεχνικές έρευνας UX και οι εφαρμογές τους
 
Power Pivot for Excel Tutorial: Κορυφαίες περιπτώσεις και παραδείγματα χρήσης
Power Pivot for Excel Tutorial: Κορυφαίες περιπτώσεις και παραδείγματα χρήσης
Οι δοκιμασμένοι και αληθινοί νόμοι του UX (με Infographic)
Οι δοκιμασμένοι και αληθινοί νόμοι του UX (με Infographic)
Εργασία με React Hooks και TypeScript
Εργασία με React Hooks και TypeScript
Κοιτάζοντας το μέλλον - Τάσεις σχεδιασμού του 2020
Κοιτάζοντας το μέλλον - Τάσεις σχεδιασμού του 2020
Ας επανασχεδιάσουμε το Facebook: 10 παραδείγματα για να εμπνεύσετε και να σας βοηθήσουμε να ξεκινήσετε
Ας επανασχεδιάσουμε το Facebook: 10 παραδείγματα για να εμπνεύσετε και να σας βοηθήσουμε να ξεκινήσετε
Δημοφιλείς Αναρτήσεις
  • Οι δηλωτικές γλώσσες χρησιμοποιούνται συνήθως για εφαρμογές παραγωγής.
  • πώς να φτιάξετε μια προσαρμοσμένη γραμματοσειρά
  • αυτό δεν είναι ιστότοπος γνωριμιών για διαφημίσεις κορίτσι
  • πώς να λάβετε αριθμούς πιστωτικών καρτών
  • Τα πρωτότυπα είναι ιδιαίτερα σημαντικά στη διαδικασία:
Κατηγορίες
  • Σχεδιασμός Για Κινητά
  • Ευκίνητο Ταλέντο
  • Τεχνολογία
  • Διεπαφή Ιστού
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt