Σε αυτήν τη σειρά άρθρων, θα δημιουργήσουμε ένα απλοποιημένο κρυπτονόμισμα που βασίζεται στην απλή εφαρμογή blockchain στο Golang σε λιγότερο από 5 λεπτά. πρέπει πρώτα να εγκαταστήσετε το golang για να κάνετε αυτό το έργο. για το πρόγραμμα επεξεργασίας κειμένου μπορείτε να χρησιμοποιήσετε οτιδήποτε, εδώ χρησιμοποιώ τον κώδικα του visual studio.
Το εγκαταστήσατε; Εντάξει, ας το κάνουμε!
εάν έχετε δημιουργήσει το έργο δημιουργήστε ένα αρχείο main.go . Oke lets code, πρώτα θα ξεκινήσουμε από το main.go Ας ξεκινήσουμε με το τμήμα struct Block του «blockchain». Στο blockchain, μπλοκάρει που αποθηκεύουν πολύτιμες πληροφορίες. Για παράδειγμα, το bitcoin μπλοκάρει τις συναλλαγές καταστημάτων, την ουσία οποιουδήποτε κρυπτονομίσματος. Εκτός από αυτό, ένα μπλοκ περιέχει ορισμένες τεχνικές πληροφορίες, όπως την έκδοσή του, την τρέχουσα χρονική σήμανση και τον κατακερματισμό του προηγούμενου μπλοκ. Σε αυτό το άρθρο δεν πρόκειται να εφαρμόσουμε το μπλοκ όπως περιγράφεται στις προδιαγραφές blockchain ή Bitcoin, αντίθετα, θα χρησιμοποιήσουμε μια απλοποιημένη έκδοση του, η οποία περιέχει μόνο σημαντικές πληροφορίες. Εδώ είναι πώς φαίνεται. εδώ έχουμε ένα μπλοκ δομής:
πληκτρολογήστε Block struct {timestamp time.Timeσυναλλαγές []συμβολοσειράprevhash []byteΚατακερματισμός []byte}
Timestamp
είναι η τρέχουσα χρονική σήμανση (όταν δημιουργείται το μπλοκ), transactions
είναι οι πραγματικές πολύτιμες πληροφορίες που περιέχονται στο μπλοκ, prevhas
αποθηκεύει τον κατακερματισμό του προηγούμενου μπλοκ και Hash
είναι ο κατακερματισμός του μπλοκ. Στις προδιαγραφές Bitcoin Timestamp
, prevhash
, να Hash
είναι κεφαλίδες μπλοκ, οι οποίες σχηματίζουν ξεχωριστή δομή δεδομένων και συναλλαγές (transaction
στην περίπτωσή μας) είναι μια ξεχωριστή δομή δεδομένων. Οπότε τα ανακατεύουμε εδώ για απλότητα.
Πώς υπολογίζουμε λοιπόν τους κατακερματισμούς; Ο τρόπος υπολογισμού των κατακερματισμών είναι ένα πολύ σημαντικό χαρακτηριστικό του blockchain και είναι αυτό το χαρακτηριστικό που κάνει το blockchain ασφαλές. Το θέμα είναι ότι ο υπολογισμός ενός κατακερματισμού είναι μια υπολογιστικά δύσκολη λειτουργία, χρειάζεται λίγο χρόνο ακόμη και σε γρήγορους υπολογιστές (γι' αυτό οι άνθρωποι αγοράζουν ισχυρές GPU για την εξόρυξη Bitcoin). Πρόκειται για ένα σκόπιμο αρχιτεκτονικό σχέδιο, το οποίο καθιστά δύσκολη την προσθήκη νέων μπλοκ, αποτρέποντας έτσι την τροποποίησή τους μετά την προσθήκη τους. Θα συζητήσουμε και θα εφαρμόσουμε αυτόν τον μηχανισμό σε επόμενο άρθρο.
Προς το παρόν, θα πάρουμε απλώς πεδία μπλοκ, θα τα συνδέσουμε και θα υπολογίσουμε έναν κατακερματισμό SHA-256 στον συνδυασμένο συνδυασμό. Ας το κάνουμε αυτό μέσα Newhash
μέθοδος:
func NewHash(time time.Time, συναλλαγές []string, prevhash []byte) []byte {input := append(prevhash, time.String()...)για συναλλαγή := εύρος συναλλαγών {input = προσάρτηση (εισαγωγή, συμβολοσειρά (rune (συναλλαγή))...)}hash := sha256.Sum256(εισαγωγή)επιστροφή κατακερματισμού[:]}
Στη συνέχεια, ακολουθώντας μια σύμβαση Golang, θα εφαρμόσουμε μια συνάρτηση που θα απλοποιήσει τη δημιουργία ενός μπλοκ και το φινίρισμα:
func Blocks(transactions []string, prevhash []byte) *Block {τρέχουσα ώρα := ώρα. Τώρα()επιστροφή &Αποκλεισμός{timestamp: time.Time{},συναλλαγές: συναλλαγές,prevhash: prevhash,Hash: NewHash (currentTime, συναλλαγές, prevhash),}}
συνεχίζουμε να δημιουργούμε μια λειτουργία εκτύπωσης. η λειτουργία εκτύπωσης είναι χρήσιμη για την εκτύπωση των περιεχομένων κάθε μπλοκ που εκτελεί μια συναλλαγή. εδώ είναι ο κωδικός:
func Print(block *Block) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("thash: %xn", block.Hash)}
Και συναλλαγή συνάρτησης για συναλλαγή εκτύπωσης:
func Συναλλαγή(μπλοκ *Αποκλεισμός) {fmt.Println("tTransactions:")για i, συναλλαγή := range block.transactions {fmt.Printf("tt%v: %qn", i, συναλλαγή)}}
αφού ολοκληρωθούν όλες οι απαιτούμενες λειτουργίες, θα το χρησιμοποιήσουμε στην κύρια λειτουργία:
func main () {ryan := []string{"ryandi έστειλε 50 BTC στον Reza"}block_1 := Blocks (ryan, []byte{})fmt.Println("Αυτό είναι το πρώτο μας μπλοκ")Εκτύπωση (μπλοκ_1)Συναλλαγή (μπλοκ_1)jack := []string{"jack send 20 BTC to Reynold"}block_2 := Blocks (jack, block_1.Hash)fmt.Println("Αυτό είναι το δεύτερο μπλοκ μας")Εκτύπωση (μπλοκ_2)Συναλλαγή (μπλοκ_2)}
εντάξει όλος ο κώδικας τελειώσαμε να γράφουμε. Ας το εκτελέσουμε πληκτρολογώντας go run main.go στο τερματικό. Έξοδος:
Συμπέρασμα
Κατασκευάσαμε ένα πολύ απλό πρωτότυπο blockchain: είναι απλώς μια σειρά μπλοκ, με κάθε μπλοκ να έχει σύνδεση με το προηγούμενο. Ωστόσο, το πραγματικό blockchain είναι πολύ πιο περίπλοκο. Στο blockchain μας η προσθήκη νέων μπλοκ είναι εύκολη και γρήγορη, αλλά στο πραγματικό blockchain η προσθήκη νέων μπλοκ απαιτεί λίγη δουλειά: πρέπει κανείς να εκτελέσει μερικούς βαρείς υπολογισμούς πριν λάβει άδεια προσθήκης μπλοκ (αυτός ο μηχανισμός ονομάζεται Proof-of-Work). Επίσης, το blockchain είναι μια κατανεμημένη βάση δεδομένων που δεν έχει έναν μόνο υπεύθυνο λήψης αποφάσεων. Έτσι, ένα νέο μπλοκ πρέπει να επιβεβαιωθεί και να εγκριθεί από άλλους συμμετέχοντες στο δίκτυο (αυτός ο μηχανισμός ονομάζεται συναίνεση). Και δεν υπάρχουν ακόμη συναλλαγές στο blockchain μας!
- "
- Όλα
- άρθρο
- εμπορεύματα
- Bitcoin
- blockchain
- BTC
- χτίζω
- αγορά
- κωδικός
- υπολογιστές
- σύνδεση
- Ομοφωνία
- περιεχόμενα
- ΣΥΝΕΧΕΙΑ
- cryptocurrency
- Ρεύμα
- ημερομηνία
- βάση δεδομένων
- Υπηρεσίες
- συντάκτης
- FAST
- Χαρακτηριστικό
- Πεδία
- Όνομα
- ακολουθήστε
- μορφή
- λειτουργία
- μελλοντικός
- GV
- χασίσι
- εδώ
- Πως
- hr
- HTTPS
- ia
- πληροφορίες
- IP
- IT
- medium
- δίκτυο
- ΑΛΛΑ
- People
- πρόληψη
- σχέδιο
- Απόδειξη-της-εργασίας
- σειρά
- τρέξιμο
- Σειρές
- Απλούς
- So
- Εκκίνηση
- κατάστημα
- καταστήματα
- Τεχνικός
- ώρα
- συναλλαγή
- Συναλλαγές
- W
- Εργασία
- γραφή