Dans cette série d’articles, nous allons créer une crypto-monnaie simplifiée basée sur une simple implémentation de blockchain dans Golang en moins de 5 minutes. vous devez d'abord installer Golang pour réaliser ce projet. pour l'éditeur de texte, vous pouvez utiliser n'importe quoi, ici j'utilise le code de Visual Studio.
L'avez-vous installé ? Très bien, faisons-le !
si vous avez créé le projet créez un fichier main.go. oke permet de coder, nous allons d'abord commencer par main.go Commençons par la partie struct Block de « blockchain ». Dans la blockchain, il bloque le stockage d’informations précieuses. Par exemple, Bitcoin bloque les transactions de stockage, qui constituent l’essence de toute crypto-monnaie. En plus de cela, un bloc contient des informations techniques, comme sa version, son horodatage actuel et le hachage du bloc précédent. Dans cet article, nous n’allons pas implémenter le bloc tel qu’il est décrit dans les spécifications blockchain ou Bitcoin, mais en utiliserons une version simplifiée, qui ne contient que des informations significatives. Voici à quoi cela ressemble. ici nous avons un bloc struct :
tapez Structure de bloc {horodatage time.Timetransactions []chaîneprévhash []octetHachage []octet}
Timestamp
est l'horodatage actuel (lorsque le bloc est créé), transactions
est l'information précieuse réelle contenue dans le bloc, prevhas
stocke le hachage du bloc précédent, et Hash
est le hachage du bloc. Dans la spécification Bitcoin Timestamp
, prevhash
et une Hash
sont des en-têtes de bloc, qui forment une structure de données distincte, et des transactions (transaction
dans notre cas) est une structure de données distincte. Nous les mélangeons donc ici pour plus de simplicité.
Alors, comment calculons-nous les hachages ? La façon dont les hachages sont calculés est une caractéristique très importante de la blockchain, et c’est cette fonctionnalité qui sécurise la blockchain. Le fait est que calculer un hachage est une opération complexe en termes de calcul, cela prend un certain temps, même sur des ordinateurs rapides (c'est pourquoi les gens achètent des GPU puissants pour extraire du Bitcoin). Il s’agit d’une conception architecturale intentionnelle, qui rend difficile l’ajout de nouveaux blocs, empêchant ainsi leur modification après leur ajout. Nous discuterons et mettrons en œuvre ce mécanisme dans un prochain article.
Pour l’instant, nous allons simplement prendre des champs de bloc, les concaténer et calculer un hachage SHA-256 sur la combinaison concaténée. Faisons cela dans Newhash
méthode:
func NewHash(time time.Time, transactions []string, prevhash []byte) []byte {input := append(prevhash, time.String()...)pour la transaction := plage de transactions {input = append(input, string(rune(transaction))...)}hachage := sha256.Sum256 (entrée)retourner le hachage[:]}
Ensuite, suivant une convention Golang, nous implémenterons une fonction qui simplifiera la création d'un bloc et terminerons :
func Blocks (transactions [] chaîne, prevhash [] octet) *Block {currentTime := time.Now()renvoyer &Bloquer{horodatage : time.Time{},transactions : transactions,prévhash : prévhash,Hachage : NewHash (currentTime, transactions, prevhash),}}
nous continuons à créer une fonction d'impression. la fonction d'impression est utile pour imprimer le contenu de chaque bloc qui effectue une transaction. voici le code :
func Imprimer (bloc *Bloc) {fmt.Printf("heure : %sn", block.timestamp.String())fmt.Printf("tprevhash : %xn", block.prevhash)fmt.Printf("thash : %xn", block.Hash)}
Et fonction transaction pour la transaction d'impression :
func Transaction (bloc *Bloc) {fmt.Println("tTransactions :")pour i, transaction := plage block.transactions {fmt.Printf("tt%v: %qn", i, transaction)}}
une fois que toutes les fonctions requises ont été complétées, nous l'utiliserons dans la fonction principale :
func main () {ryan := []string{"ryandi a envoyé 50 BTC à Reza"}block_1 := Blocs(ryan, []byte{})fmt.Println("Ceci est notre premier bloc")Imprimer(block_1)Transaction (bloc_1)jack := []string{"jack envoie 20 BTC à Reynold"}block_2 := Blocs(jack, block_1.Hash)fmt.Println("Ceci est notre deuxième bloc")Imprimer(block_2)Transaction (bloc_2)}
ok, tout le code que nous avons fini d'écrire. exécutons-le en tapant go run main.go dans le terminal. Sortir :
Conclusion
Nous avons construit un prototype de blockchain très simple : il s’agit simplement d’un ensemble de blocs, chaque bloc ayant une connexion au précédent. La blockchain actuelle est cependant beaucoup plus complexe. Dans notre blockchain, l'ajout de nouveaux blocs est facile et rapide, mais dans la vraie blockchain, l'ajout de nouveaux blocs nécessite un certain travail : il faut effectuer des calculs lourds avant d'obtenir l'autorisation d'ajouter des blocs (ce mécanisme est appelé Proof-of-Work). De plus, la blockchain est une base de données distribuée qui n’a pas de décideur unique. Ainsi, un nouveau bloc doit être confirmé et approuvé par les autres participants du réseau (ce mécanisme est appelé consensus). Et il n’y a pas encore de transactions dans notre blockchain !
- "
- Tous
- article
- sur notre blog
- Bitcoin
- blockchain
- BTC
- construire
- acheter
- code
- ordinateurs
- connexion
- Consensus
- contenu
- continuer
- crypto-monnaie
- Courant
- données
- Base de données
- Conception
- éditeur
- RAPIDE
- Fonctionnalité
- Des champs
- Prénom
- suivre
- formulaire
- fonction
- avenir
- GV
- hachage
- ici
- Comment
- hr
- HTTPS
- ia
- d'information
- IP
- IT
- moyenne
- réseau et
- Autre
- Personnes
- prévention
- Projet
- Preuve de travail
- gamme
- Courir
- Série
- étapes
- So
- Commencer
- Boutique
- STORES
- Technique
- fiable
- transaction
- Transactions
- W
- activités principales
- écriture